web-dev-qa-db-fra.com

fonction jquery keyup vérifier si nombre

j'essaie de créer un champ de saisie où l'utilisateur ne peut taper que des chiffres. cette fonction fonctionne déjà presque bien pour moi: 

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

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

mais le problème est que, lorsque l'utilisateur détient la clé avec un caractère, la fonction keyup ne déclenche pas .... des idées comment je peux interdire cela? 

13
Adam Sam

Essayez de vous lier à l'événement keypress au lieu de keyup. Il est déclenché à plusieurs reprises quand une touche est maintenue enfoncée. Lorsque la touche enfoncée n'est pas un numéro, vous pouvez appeler preventDefault(), ce qui l'empêchera d'être placée dans la balise input.

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

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

   });

Exemple de travail:http://jsfiddle.net/rTWrb/2/

29
Kevin Bowersox

J'ai décidé d'utiliser la réponse fournie par @Rahul Yadav, mais elle est erronée car elle ne prend pas en compte les touches du pavé numérique, qui ont des codes différents. 

Ici, vous pouvez voir un extrait de la table de code :

Voici la fonction que j'ai implémentée:

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;

}

3
Richard P.
1
webdeveloper

Essayez ceci..il peut être utile.

<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>
0
Krunal Hingu

Avec un événement de clé, utilisez event.key pour obtenir la valeur réelle. Pour vérifier si entier:

isFinite(event.key);

Une solution HTML plus simple consisterait à utiliser l’entrée number. Il se limite à des nombres (en quelque sorte).

<input type="number">

Quoi qu'il en soit, vous devez nettoyer toutes les entrées utilisateur avec:

string.replace(/[^0-9]/g,'');
0
Gibolt

J'ai utilisé la fonction suivante pour vérifier si une chaîne donnée est numérique ou non. Cette implémentation fonctionne sur keyup et keydown et prend également en charge les touches du pavé numérique

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

En supposant que votre code clé sur l'événement keyup ou keydown est dans la variable keyCode:

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)));

Renvoie false si la valeur renvoyée par isNumber est false:

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