Comment puis-je obtenir la valeur "réelle" d'un <input type="number">
champ?
J'ai une input
boîte et j'utilise un type d'entrée HTML5 plus récent number
:
<input id="edQuantity" type="number">
Ceci est principalement pris en charge dans Chrome 29:
Ce dont j'ai besoin maintenant, c'est la capacité de lire la valeur «brute» que l'utilisateur a entrée dans la zone de saisie. Si l'utilisateur a saisi un numéro:
puis edQuantity.value = 4
, et tout va bien.
Mais si l'utilisateur entre un texte invalide, je veux colorer la zone de saisie en rouge:
Malheureusement, pour une zone de type="number"
saisie, si la valeur de la zone de texte n'est pas un nombre, alors value
renvoie une chaîne vide:
edQuantity.value = "" (String);
(au moins dans Chrome 29)
Comment puis-je obtenir la valeur "brute" d'un <input type="number">
contrôle?
J'ai essayé de parcourir la liste des autres propriétés de la zone de saisie de Chrome:
je n'ai rien vu qui ressemble à l'entrée réelle.
Je ne pourrais pas non plus trouver un moyen de savoir si la boîte "est vide" ou non. J'aurais peut-être pu déduire:
value isEmpty Conclusion
============= ============= ================
"4" false valid number
"" true empty box; not a problem
"" false invalid text; color it red
Remarque : vous pouvez tout ignorer après la règle horizontale; c'est juste du remplissage pour justifier la question. Aussi: ne confondez pas l'exemple avec la question. Les gens pourraient vouloir la réponse à cette question pour des raisons autres que de colorer la boîte en rouge (un exemple: convertir le texte "four"
en "4"
symbole latin pendant l'événement onBlur)
Comment puis-je obtenir la valeur "brute" d'un <input type="number">
contrôle?
Lecture bonus
la source
number
n'est pas le type d'entrée que vous recherchez; utilisez unetext
entrée normale .validity
état du champ - je m'attendraistypeMismatch
mais je ne me suis pas vérifié.blah
est un numéro invalide".Réponses:
Selon le WHATWG , vous ne devriez pas pouvoir obtenir la valeur à moins qu'il s'agisse d'une entrée numérique valide. L'algorithme de nettoyage du champ de nombre d'entrée indique que le navigateur est censé définir la valeur sur une chaîne vide si l'entrée n'est pas un nombre à virgule flottante valide.
En spécifiant le type (
<input type="number">
), vous demandez au navigateur de faire un travail pour vous. Si, d'un autre côté, vous souhaitez être en mesure de capturer l'entrée non numérique et d'en faire quelque chose, vous devez vous fier à l'ancien champ de saisie de texte éprouvé et analyser le contenu vous-même.Le W3 a également les mêmes spécifications et ajoute:
la source
<input type="number">
), vous demandez au navigateur de faire un travail pour vous. Personnellement, je demandais simplement aux navigateurs mobiles d'afficher un clavier numérique et j'ai obtenu la validation comme un supplément désagréable. La plupart de ces problèmes proviennent du fait que l'type
attribut détermine à la fois les règles de validation et les règles sur le mécanisme de saisie à afficher, mais il est tout à fait possible de vouloir montrer un clavier numérique aux utilisateurs mobiles sans vouloir également que la validation des nombres s'applique aux utilisateurs de bureau. HTML 5.1 résoudra au moins ce problème avec l'inputmode
attribut.Cela ne répond pas à la question, mais la solution de contournement utile consiste à vérifier
Le
ValidityState
d'un objet donne des indices sur ce que l'utilisateur a entré. Considérez unetype="number"
entrée avec unmin
et unmax
ensembleNous voulons toujours utiliser
.validity.valid
.D'autres propriétés ne donnent que des informations bonus:
Vous devrez vous assurer que le navigateur prend en charge la validation HTML5 avant de l'utiliser:
Prime
Spudly a une réponse utile qu'il a supprimée:
la source
.validity
propriété, mais ne gère pas correctement.valid
?!typeMismatch
peut avoir du sens, mais ce n'est que pour les types de courrier électronique ou d'url ...required
).badInput
été ajouté le 20/11/2012 . Mais personne ne devrait regarderbadInput
pour voir si l'entrée est valide; ils devraient regarder.valid
. Il est possible (et correct).badInput
d'être faux et d'avoir toujours une entrée invalide..valid
est définie comme l'absence d'erreurs de validation (par exemple, les incohérences, les débordements, les sous-débits), dont.badInput
un seul type d'erreur. Notez le graphique ci-dessus où.badInput
est false, mais l'entrée n'est toujours pas valide.la source
Suivre toutes les touches enfoncées en fonction de leurs codes de touche
Je suppose que l'on pourrait écouter les événements keyup et conserver un tableau de tous les caractères entrés, en fonction de leurs codes clés. Mais c'est une tâche assez fastidieuse et probablement sujette à des bugs.
http://unixpapa.com/js/key.html
Sélectionnez l'entrée et obtenez la sélection sous forme de chaîne
Tout le crédit à: int32_t
la source
Delete
,Backspace
,Ctrl+X
,Ctrl+V
,Right-click-cut
,Right-click-paste
.