Je veux empêcher l'entrée de nombre sur l'événement keydown sur le champ de texte et exécuter la fonction de gestionnaire personnalisé. Voici les problèmes
e.target.value
est inutile car la valeur de la clé n'est pas encore projetée dans la valeur ciblee.keyCode
pour le numéro dépend du type de clavier, de la disposition de la langue, de la touche Fn ou MajString.fromCharCode(e.keyCode)
n'est pas fiable, du moins sur mon clavier (tchèque qwerty)e.keyCode
est un attribut hérité et suggère plutôt e.char
, mais il n'est pas encore implémenté dans les navigateursAlors, comment intercepter le nombre saisi avant qu'il n'apparaisse dans le champ de texte?
Utilisez plutôt l'événement keypress
. C'est le seul événement clé qui vous fournisse des informations sur le caractère saisi, via la propriété which
de la plupart des navigateurs et (ce qui prête à confusion) la propriété keyCode
dans IE. En utilisant cela, vous pouvez supprimer conditionnellement l'événement keypress
en fonction du caractère saisi. Toutefois, cela ne vous aidera pas à empêcher l'utilisateur de coller ou de faire glisser du texte contenant des caractères numériques. Vous aurez donc besoin d'une sorte de validation supplémentaire.
Ma référence préférée pour les événements clés JavaScript: http://unixpapa.com/js/key.html
textBox.onkeypress = function(e) {
e = e || window.event;
var charCode = (typeof e.which == "undefined") ? e.keyCode : e.which;
var charStr = String.fromCharCode(charCode);
if (/\d/.test(charStr)) {
return false;
}
};
Essayez ceci pour remplacer les valeurs entières:
<input onkeydown="Check(this);" onkeyup="Check(this);"/>
<script>
function Check(me) {
me.value = me.value.replace(/[0-9]/g, "");
}
</script>
Pour empêcher la saisie d'entiers:
<input onkeydown="Check(event);" onkeyup="Check(event);"/>
<script>
function Check(e) {
var keyCode = (e.keyCode ? e.keyCode : e.which);
if (keyCode > 47 && keyCode < 58) {
e.preventDefault();
}
}
</script>
J'ai posté ma réponse ici. Vous pouvez utiliser la vérification isNumber sur le caractère saisi lors de la frappe. Assurez-vous de manipuler les touches du pavé numérique lorsque vous appuyez sur la touche, comme indiqué dans la réponse ci-dessous. https://stackoverflow.com/a/42917293/5076414