2012-03-23 7 views
18

Wygląda na to, że żaden z atrybutów HTML "maxlength", "min" lub "max" nie ma pożądanego wpływu na iPhone'a dla następujących znaczników:Jak ograniczyć liczbę znaków, które można wprowadzić w polu wprowadzania numeru HTML5 na iPhone'ie

<input type="number" maxlength="2" min="0" max="99"/> 

Zamiast ograniczenie liczby cyfr lub wartość wprowadzony numer, numer jest tylko w lewo, jak to zostało wpisane na iPhone 4. to markup działa na większości telefonów innych testowanych.

Co daje?

Jakiekolwiek obejścia?

Jeśli chodzi o rozwiązanie, używamy jQuery mobile.

Dzięki!

Odpowiedz

23

Przykład

JS

function limit(element) 
{ 
    var max_chars = 2; 

    if(element.value.length > max_chars) { 
     element.value = element.value.substr(0, max_chars); 
    } 
} 

HTML

<input type="number" onkeydown="limit(this);" onkeyup="limit(this);"> 

Jeśli jQuery można uporządkować JavaScript trochę:

JS

var max_chars = 2; 

$('#input').keydown(function(e){ 
    if ($(this).val().length >= max_chars) { 
     $(this).val($(this).val().substr(0, max_chars)); 
    } 
}); 

$('#input').keyup(function(e){ 
    if ($(this).val().length >= max_chars) { 
     $(this).val($(this).val().substr(0, max_chars)); 
    } 
}); 

HTML

<input type="number" id="input"> 
+0

Cześć! Ta metoda działa dobrze, jeśli ograniczę użytkownika do 1/2/3 znaków, ale jak tylko przekroczę limit 4 lub więcej, rozwiązanie zostanie zerwane. Chyba problem polega na dodaniu "," w polu liczb, ale nie jestem pewien. Czy możesz sprawdzić to rozwiązanie dla 4 lub więcej znaków. – Anshul

+0

Niestety, do tego doszedłem polegając na javascript/jQuery. Nie mogłem użyć type = "range", ponieważ ma on inną semantyczną. –

+0

Nie na keydown: jeszcze nie kopiuj/wklej –

4

Według MDN, maxlength nie jest używane dla number s. Czy próbowałeś tylko:

<input type="number" min="0" max="99" /> 

LUB

<input type="range" min="0" max="99" /> 
+0

późno do gry, ale jak to się stało, że 4 przegrywa? deffo nie działa –

0

Wiem, że to pytanie jest jedna lat, ale nie pr efer wybraną odpowiedź. Ponieważ sposób jego działania polega na tym, że pokazuje on wpisaną postać, a następnie ją usuwa.

W przeciwieństwie do tego, zaproponuję inny sposób, który jest podobny do Will'a, jest po prostu lepszy w sposobie, w którym zapobiega wyświetlaniu postaci. Dodałem również blok else if, aby sprawdzić, czy znak jest liczbą, a następnie jest to dobra funkcja do sprawdzania poprawności pól liczbowych.

HTML

<input type="number" onkeydown="limit(this);"> 

JS

function limit(element) 
{ 
    var max_chars = 2; 
    if (arguments[1].char !== "\b" && arguments[1].key !== "Left" && arguments[1].key !== "Right") { 
     if (element.value.length >= max_chars) { 
      return false; 
     } else if (isNaN(arguments[1].char)) { 
      return false; 
     } 
    } 
} 
1

Tutaj bardziej zoptymalizowana wersja jQuery że buforuje selektorów. Używa również atrybutu maxlength, który nie jest obsługiwany przez numer typu wejścia.

// limits the input based on the maxlength attribute, this is by default no supported by input type number 
$("input[type=number]").on('keydown keyup',function(){ 
    var $that = $(this), 
    maxlength = $that.attr('maxlength') 
    if($.isNumeric(maxlength)){ 
     $that.val($that.val().substr(0, maxlength)); 
    }; 
}); 
1

Inną opcją z jQuery, ale onkeypress wydarzenie ...;)

$("input[type=number]").on('keypress',function(e) { 
    var $that = $(this), 
    maxlength = $that.attr('maxlength') 
    if($.isNumeric(maxlength)){ 
     if($that.val().length == maxlength) { e.preventDefault(); return; } 

     $that.val($that.val().substr(0, maxlength)); 
    }; 
}); 
1

można użyć tego kodu:

<input type="number" maxlength="2" min="0" max="99" 
     onkeypress="limitKeypress(event,this.value,2)"/> 

i kodu js :

function limitKeypress(event, value, maxLength) { 
    if (value != undefined && value.toString().length >= maxLength) { 
     event.preventDefault(); 
    } 
} 
+0

Dzięki Buddy @Behnam Btw Dlaczego musimy MaxLength = "2" min = "0" max = "99" tutaj. .. ?? Wraz z nich działa dobrze myślę :) –

+0

MaxLength atr nie działają na wejściu z type = „number” –

0

To jest odpowiedź Tripex zoptymalizowana pod kątem dopuszczenia klawisza Delete, działa przy pisaniu i wklejaniu.

$(document).on("keyup", "#your_element", function(e) { 
    var $that = $(this), 
    maxlength = $that.attr('maxlength'); 
    if ($.isNumeric(maxlength)){ 
     if($that.val().length === maxlength) { 
      e.preventDefault(); 
      // If keyCode is not delete key 
      if (e.keyCode !== 64) { 
       return; 
      } 
     } 
     $that.val($that.val().substr(0, maxlength)); 
    } 
}); 
Powiązane problemy