Autoriser uniquement les nombres ou le point décimal dans le champ de formulaire

J'ai limité le champ de saisie à des nombres seulement via js mais je ne sais pas comment autoriser également les décimales …

function isNumberKey(evt) { var charCode = (evt.which) ? evt.which : event.keyCode if (charCode > 31 && (charCode < 48 || charCode > 57)) return false; return true; } 

Merci d'avance!

Répondre:

 function isNumberKey(evt) { var charCode = (evt.which) ? evt.which : event.keyCode if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 46) return false; return true; } 

L'ajout du charCode 46 fonctionnait parfaitement (valeur de la touche). 190 et 110 n'ont rien fait.

Merci à tous pour votre aide!

Les codes dépendent de l'événement que vous écoutez, un moyen simple de trouver ce que vous voulez est en utilisant la page de test de KeyCode d'événement JavaScript ici avec l'entrée de test, par exemple pour un arrêt complet (le "gauche de droite") que vous avez

  onKeyDown onKeyPress onKeyUp event.keyCode 190 46 190 event.charCode 0 46 0 event.which 190 46 190 

Et pour le . Sur le pavé numérique il est

  onKeyDown onKeyPress onKeyUp event.keyCode 110 46 110 event.charCode 0 46 0 event.which 110 46 110 

Comme vous pouvez le voir, il est plus uniforme de vérifier avec onKeyPress avec charCode, c'est le numéro unicode; String.fromCharCode(46); // "." .

Il existe une liste complète sur la page MDN pour KeyboardEvent où elle est également indiquée

Remarque : les développeurs Web ne doivent pas utiliser l'attribut keycode des clés imprimables dans les gestionnaires d'événements de dépannage et de saisie de clés. Comme décrit ci-dessus, le code-clé n'est pas utilisable pour vérifier le caractère qui sera entré en particulier lorsque la touche Maj + AltGr est enfoncée. Lorsque les développeurs Web implémentent un gestionnaire de touches de raccourci, l'événement keypress est un meilleur événement à cet effet sur Gecko au moins. Voir Gecko Keypress Event pour le détail.

Vous pouvez observer les effets étranges d'utiliser AltGr ou Shift sur keyCode avec la clé de choix dans la page de test que j'ai associée.

En supposant que vous utilisez la clé vers le bas ou vers le haut:

  function isNumberKey(evt) { var charCode = (evt.which) ? evt.which : event.keyCode if (charCode > 31 && (charCode < 48 || (charCode > 57 && charCode != 190 && charCode != 110))) return false; return true; } 

110 est le point décimal, 190 est la période

http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes

Il y a un violon avec des cas de test

Avec HTML5, l'élément de input obtenu un nouvel attribut: le pattern . Vous pouvez spécifier une expression régulière validée par le navigateur avant de soumettre le formulaire.

 <input type="text" pattern="([0-9]+\.)?[0-9]+" /> 

Cependant , il n'est pas largement soutenu .

L'attribut pattern est pris en charge dans Internet Explorer 10, Firefox, Opera et Chrome. ( Écoles maternelles )

Disclaimer: l'expression est faible, allez construire une meilleure 🙂