2013-06-20 14 views
10

próbuję utworzyć pole wprowadzania, w którym użytkownik może wpisywać tylko liczby. funkcja ta pracuje już prawie w porządku dla mnie:Funkcja sprawdzania jquery sprawdź czy numer

 $('#p_first').keyup(function(event){ 
     if(isNaN(String.fromCharCode(event.which))){ 
      var value = $(this).val(); 

      $(this).val(value.substr(0,value.length-1)); 
     } 
    }); 

ale problemem jest to, trakt użytkownik posiada klucz z krytym postać keyup funkcja nie powoduje .... jakieś pomysły jak mogę zabronić tego?

+0

która posiada klucz? Podając nieco więcej opisu przyczyny problemu? –

+0

dowolny klawisz ... typ wejścia = tekst ... a użytkownik trzyma na przykład "aaaaaaaaaaaaaa", więc funkcja keyup() nie uruchamia się, dopóki nie przestanie przytrzymywać klawisza "a" –

+0

Dzięki za dostarczenie więcej problemów, myślę moje proponowane rozwiązanie powinno rozwiązać twój problem. –

Odpowiedz

22

Spróbuj połączyć się z wydarzeniem keypress zamiast keyup. Po naciśnięciu klawisza jest wielokrotnie uruchamiany. Gdy naciśnięty klawisz nie jest numerem, można zadzwonić pod numer preventDefault(), co uniemożliwi umieszczenie klucza w tagu wejściowym.

$('#p_first').keypress(function(event){ 

     if(event.which != 8 && isNaN(String.fromCharCode(event.which))){ 
      event.preventDefault(); //stop character from entering input 
     } 

    }); 

Przykład pracy:http://jsfiddle.net/rTWrb/2/

+0

próbowałem, ale nowy znak jest, gdy naciśnięcie klawisza nie działa jeszcze w polu tekstowym, więc nie mogę go usunąć z substr() –

+0

@AdamSam niesamowite sugestie –

+0

niesamowite! dzięki;) –

0

Spróbuj tego rozwiązania:

jQuery('.numbersOnly').keyup(function() { 
    this.value = this.value.replace(/[^0-9\.]/g,''); 
}); 

Demo: http://jsfiddle.net/DbRTj/

same pytania:

+0

Jeśli używam klawiszy po prawej stronie, nie robi tego " t działa dobrze. –

+0

@IagoMelanias Co masz na myśli? Mówisz o drugim wprowadzeniu LUB o kodzie startowym tematu? – webdeveloper

+0

Mówię o twoim kodzie. Jeśli używam klawiszy po prawej stronie mojej klawiatury, to nie działa. –

-1
JavaScript: 

    function isNumberKey(a){ 
    var x=a.val(); 
    a.val(x.replace(/[^0-9\.]/g,'')); 

} 

HTML: 

    <td><input type="text" name="qty" onkeypress="onkeyup="return isNumberKey($(this));"" value="" style="width:100px;" field="Quantity" class="required"></td> 
+0

to zwraca true dla ucieczki? – jeff

+0

Ta funkcja jest nieprawidłowa, ponieważ nie uwzględnia klawiszy numerycznych, które mają inny kod. Zobacz alternatywną odpowiedź. –

+0

Ta funkcja zwraca wartość true, jeśli wejście jest tylko liczbą. –

0

Spróbuj This..it może przydatny.

<HTML> 
<input type="text" name="qty" id="price" value="" style="width:100px;" field="Quantity" class="required"> 
</HTML> 

<script> 
$(document).ready(function() { 
$('#price').live('keyup',function(){ 
     this.value = this.value.replace(/[^0-9\.]/g,''); 
     }); 
}); 
</script> 
2

postanowiłem wykorzystać odpowiedź dostarczoną przez @Rahul Yadav, ale to jest błędne, gdyż nie uważa klawiszy numerycznej, które mają różne kody.

Tutaj można zobaczyć excerpt of the code table:

tu funkcję I wdrożone:

function isNumberKey(e) { 
var result = false; 
try { 
    var charCode = (e.which) ? e.which : e.keyCode; 
    if ((charCode >= 48 && charCode <= 57) || (charCode >= 96 && charCode <= 105)) { 
     result = true; 
    } 
} 
catch(err) { 
    //console.log(err); 
} 
return result; 

}

2

Najlepszym sposobem jest sprawdzenie wartości wejściowych, zamiast naciśnięty klawisz. Ponieważ istnieją tabulatory, strzałki, backspace i inne znaki, które należy sprawdzić, gdy używasz kodu postaci.

które sprawdzają kod wartość wejściowa użytkownika po naciśnięciu klawisza:

$('#p_first').keyup(function(){ 
    while(! /^(([0-9]+)((\.|,)([0-9]{0,2}))?)?$/.test($('#p_first').val())){ 
     $('#p_first').val($('#p_first').val().slice(0, -1)); 
    } 
}); 

Podczas gdy pętla usunąć ostatni znak, aż wartość wejściowa jest prawidłowy. Regex /^(([0-9]+)((\.|,)([0-9]{0,2}))?)?$/ sprawdza poprawność liczby całkowitej i liczby zmiennoprzecinkowej np. "12,12", "12,1", "12". Ważne jest, aby numer "12." (kropka na końcu) również obowiązuje! W przeciwnym razie użytkownik nie może wprowadzić żadnego okresu.

A następnie przesłać czek regex dla ważnego numeru pływaka ([0-9]{1,2}) zamiast ([0-9]{0,2}):

$('form').submit(function(e){ 
    if(! /^([0-9]+)((\.|,)([0-9]{1,2}))?$/.test($('#p_first').val())){ 
     $('#p_first').addClass('error'); 
     e.preventDefault(); 
    } 
}); 

Wskazówka: Lepiej umieścić $('#p_first') do zmiennej.var input = $('#p_first');

0

Użyłem następującej funkcji, aby sprawdzić, czy dany ciąg jest liczbą, czy nie. Implementacja ta działa na keyup i keydown, a także dba o klawiszami NUM

// Validate Numeric inputs 
function isNumber(o) { 
    return o == '' || !isNaN(o - 0); 
} 

Zakładając, że Twój klucz kod na keyup lub keyDown jest w keyCode zmiennej:

var keyCode = e.keyCode || e.which; 
if (keyCode >= 96 && keyCode <= 105) { 
     // Numpad keys 
     keyCode -= 48; 
} 
console.log(isNumber(String.fromCharCode(keyCode))); 
console.log(isNumber($(this).val() + String.fromCharCode(keyCode))); 

return false jeśli wartość zwracana from isNumber jest fałszywe:

var txtVal = $(this).val() + String.fromCharCode(keyCode); 
    if (!isNumber(txtVal)) { 
     e.returnValue = false; 
    } 
0

W przypadku zdarzenia kluczowego należy użyć wartości event.key, aby uzyskać aktualną wartość. Aby sprawdzić, czy całkowita:

isFinite(event.key); 

prostsze rozwiązanie HTML byłoby użyć wejście number typu. Ogranicza się tylko do liczb (rodzaj).

<input type="number"> 

Tak czy inaczej, należy wyczyścić wszystkie dane wejściowe użytkownika z:

string.replace(/[^0-9]/g,''); 
Powiązane problemy