web-dev-qa-db-fra.com

Comment empêcher la saisie d'un numéro lors de l'incrustation?

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 cible
  • e.keyCode pour le numéro dépend du type de clavier, de la disposition de la langue, de la touche Fn ou Maj
  • String.fromCharCode(e.keyCode) n'est pas fiable, du moins sur mon clavier (tchèque qwerty)
  • spécification w3 indique que e.keyCode est un attribut hérité et suggère plutôt e.char, mais il n'est pas encore implémenté dans les navigateurs

Alors, comment intercepter le nombre saisi avant qu'il n'apparaisse dans le champ de texte?

12
Jan Turoň

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;
    }
};
22
Tim Down

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>
11
palaѕн

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

0
Sacky San