j'ai un <input type="number">
et je veux restreindre la saisie des utilisateurs à des nombres purement ou des nombres avec des décimales jusqu'à 2 décimales.
Fondamentalement, je demande une entrée de prix.
Je voulais éviter de faire des regex. Y a-t-il un moyen de le faire?
<input type="number" required name="price" min="0" value="0" step="any">
type="text"
toute façon, alors qu'importe?Réponses:
Au lieu de
step="any"
, qui autorise un nombre quelconque de décimales, utilisezstep=".01"
, qui autorise jusqu'à deux décimales.Plus de détails dans la spécification: https://www.w3.org/TR/html/sec-forms.html#the-step-attribute
la source
500.12345
dans l'une des entrées, peut-être que notre compréhension des exigences est différente.:valid
et:invalid
sont appliqués comme prévu.Si quelqu'un recherche une expression régulière qui n'autorise que les nombres avec 2 décimales en option
Par exemple, j'ai trouvé la solution ci-dessous assez fiable
HTML:
JS / JQuery:
la source
setTimeout()
c'est attendre la fin de l'keydown
événement avant de configurer lenewVal
(sinon ce sera le même que leoldVal
). Cependant, avec un timeout de 0, c'est inutile et ne fonctionne pas car les deux valeurs sont souvent les mêmes (dans Firefox). Si vous le définissez sur 1, par exemple, cela fonctionne très bien.Pour la monnaie, je suggère:
Voir http://jsfiddle.net/vx3axsk5/1/
Les propriétés HTML5 "step", "min" et "pattern" seront validées lorsque le formulaire sera envoyé, pas onblur. Vous n'avez pas besoin du
step
si vous en avez unpattern
et vous n'en avez pas besoinpattern
si vous en avez unstep
. Vous pouvez donc revenir àstep="any"
mon code puisque le modèle le validera de toute façon.Si vous souhaitez valider onblur, je pense que donner à l'utilisateur un repère visuel est également utile, comme colorier l'arrière-plan en rouge. Si le navigateur de l'utilisateur ne le prend pas en charge,
type="number"
il reviendra àtype="text"
. Si le navigateur de l'utilisateur ne prend pas en charge la validation du modèle HTML5, mon extrait de code JavaScript n'empêche pas la soumission du formulaire, mais il donne un signal visuel. Donc, pour les personnes avec une mauvaise prise en charge HTML5 et les personnes qui tentent de pirater la base de données avec JavaScript désactivé ou qui forgent des demandes HTTP, vous devez de toute façon valider sur le serveur. Le point avec la validation sur le front-end est pour une meilleure expérience utilisateur. Donc, tant que la plupart de vos utilisateurs ont une bonne expérience, il est bon de s'appuyer sur les fonctionnalités HTML5 à condition que le code fonctionne toujours et que vous puissiez valider sur le back-end.la source
pattern
ne fonctionne pas pourinput type=number
:<input type="number"> elements do not support use of the pattern attribute for making entered values conform to a specific regex pattern. The rationale for this is that number inputs can't contain anything except numbers, and you can constrain the minimum and maximum number of valid digits using the min and max attributes, as explained above.
Étape 1: Accrochez votre zone de saisie de numéro HTML à un événement onchange
ou dans le code HTML
Étape 2: Écrivez la
setTwoDecimalPlace
méthodeVous pouvez modifier le nombre de décimales en variant la valeur passée dans la
toFixed()
méthode. Voir les documents MDN .la source
J'ai trouvé que l'utilisation de jQuery était ma meilleure solution.
la source
Essayez ceci pour autoriser seulement 2 décimales dans le type d'entrée
Ou utilisez jQuery comme suggéré par @SamohtVII
la source
Utilisez ce code
Par défaut, la valeur de l'étape pour les éléments d'entrée HTML5 est step = "1".
la source
Ecrivez
lang = 'nb "vous permet d'écrire vos nombres décimaux avec une virgule ou un point
la source
En entrée:
Sur le script:
la source