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?
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/
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;
}
Essayez cette solution:
jQuery('.numbersOnly').keyup(function () {
this.value = this.value.replace(/[^0-9\.]/g,'');
});
Démo: http://jsfiddle.net/DbRTj/
Mêmes questions:
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>
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,'');
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;
}