Comment ne permettent qu'un nombre (en chiffres et point décimal) pour être tapé dans une entrée?
Je suis nouveau sur angularjs. Je me demande quel est le moyen de ne permettre qu'à un nombre valide tapé dans une zone de texte.
Par exemple, l'utilisateur peut taper "1.25", mais ne peuvent pas taper "1.un" ou "1..". Lorsque l'utilisateur essaie de taper dans le prochain personnage qui va faire un numéro non valide, il ne peut pas le saisir.
Merci d'avance.
- Vous pouvez utiliser ng-changement d'appeler une fonction qui vérifie l'entrée.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer de la présente directive pour arrêter les caractères non valides d'être entré dans un champ de saisie. (Mise à jour: il s'appuie sur la directive sur les connaissances explicites de le modèle, ce qui n'est pas idéal pour la réutilisabilité, voir ci-dessous pour une ré-utilisable exemple)
Elle tient également compte de l'un de ces scénarios:
J'ai créé un jsFiddle ici, donc vous pouvez voir comment cela fonctionne.
Mise à JOUR
Suivantes Adam Thomas de la rétroaction au sujet de ne pas y compris les références de modèles directement à l'intérieur d'une directive (qui je crois est la meilleure approche) j'ai mis à jour mon jsFiddle à fournir une méthode qui ne repose pas sur ce.
La directive rend l'utilisation de bi-directionnelle de liaison de portée locale à portée parent. Les modifications apportées aux variables à l'intérieur de la directive sera reflétée dans la portée parent, et vice versa.
HTML:
Angulaire code:
J'ai écrit un travail CodePen exemple de démontrer un excellent moyen de filtrage numérique entrée de l'utilisateur. La directive permet uniquement les nombres entiers positifs, mais les regex peuvent être facilement mis à jour pour supporter tout format numérique de votre choix.
Mon directive est facile à utiliser:
La directive est très facile à comprendre:
Je tiens à souligner que modèle des références de la directive est important.
J'espère que vous trouverez ce utile.
Grand merci à Sean Christe et Chris Grimes de me présenter à la ngModelController
input type="number"
?-
et.
?type="number"
🙁 l'Amour de la manière!ngModelCtrl.$commitViewValue();
entre le $setViewValue(propre); et $render();Tout d'abord un Grand merci à Adam thomas
J'ai utilisé le même Adam est logique pour ce avec une petite modification à accepter les valeurs décimales.
Remarque: Cela permettra chiffres avec seulement 2 valeurs décimales
Voici mon Exemple De Travail
HTML
Javascript
val
à la chaîne avant deval.replace
parce qu'il crache erreurval.replace is not function
lorsque input[type=nombre].decimalCheck[1] = decimalCheck[1].slice(0, attrs.validNumber);
cela a été le remplacement de la...slice(0, 2)...
Utiliser l'étape de la balise pour définir le minimum de la variable de la valeur à certains nombre décimal:
par exemple
étape="0.01"
Il y a peu de documentation sur le sujet ici:
http://blog.isotoma.com/2012/03/html5-input-typenumber-and-decimalsfloats-in-chrome/
step="0.01"
DÉMO - - jsFiddle
Directive
HTML
Remarque : Ne pas oublier d'inclure jQuery avec angular js
Vous pouvez facilement utiliser la ng-modèle.
Il y a un numéro d'entrée de la directive qui je pense peut faire tout ce que vous voulez.
la doc officielle est ici: http://docs.angularjs.org/api/ng.directive:input.number
HTML
//Tout type de 123
//type: 123 ou 123.45
Je voulais une directive qui pourrait être limitée par
min
etmax
attributs comme:<input type="text" integer min="1" max="10" />
j'ai donc écrit ce qui suit:
ngModel.$commitViewValue();
entre le $setViewValue(propre); et $render();Voici ma vraiment rapide-n-sale un:
Cela exige de vous d'inclure le angulaires-bibliothèque de ressources pour les liaisons permanentes dans les champs pour fins de validation.
Exemple de travail ici
Fonctionne comme un champion en version 1.2.0-rc.3+. Modifier la regex et vous devriez être tous ensemble. Peut-être quelque chose comme
/^(\d|\.)+$/
? Comme toujours, valider côté serveur lorsque vous avez terminé.()
s nécessaire?angular-resource.js
a rien à voir avecng-pattern
- il ressemble à un $http bibliothèqueCelui-ci semble le plus simple pour moi:
http://jsfiddle.net/thomporter/DwKZh/
(Code n'est pas le mien, je suis tombé par hasard sur elle)
modelCtrl.$commitViewValue();
entre le $setViewValue(propre); et $render();J'ai modifié Alan réponse ci-dessus afin de restreindre le nombre spécifié min/max. Si vous entrez un numéro à l'extérieur de la gamme, il sera de définir la valeur min ou max après 1500ms. Si vous désactivez le champ complètement, il ne sera pas de régler quoi que ce soit.
HTML:
Javascript:
J'ai eu un problème similaire et mise à jour de la
input[type="number"]
exemple sur angulaire docs pour les travaux avec des décimales de précision et je suis en utilisant cette approche pour le résoudre.PS: UN petit rappel, c'est que le navigateur prend en charge les caractères " e " et " E " dans l'input[type="nombre"], parce que le
keypress
événement est requise.Et dans le html, vous pouvez utiliser cette approche
Voici la plunker avec cet extrait
L'expansion à partir de gordy réponse:
Bon travail btw. Mais elle a aussi permis + à l'avant. Ce sera l'enlever.
Ici est un dérivé qui permet également de bloquer le point décimal à être entré deux fois
HTML
Angulaire
L'extension Adam Thomas de réponse, vous pouvez facilement faire de cette directive plus générique par l'ajout d'argument d'entrée personnalisée avec des regexp:
HTML
En direct sur CodePen
S'il vous plaît vérifier mon composant qui va vous aider à ne permettre qu'à un type de données particulier. Actuellement en charge entier, décimal, de la chaîne et l'heure(HH:MM).
string
- Chaîne est permis avec, en option, longueur maxinteger
- Entier uniquement autorisé avec, en option, la valeur max.decimal
- Virgule autorisé uniquement avec l'option décimale à points et de la valeur max (par défaut 2 décimales)time
- 24 heures format de l'Heure(HH:MM) uniquement autoriséhttps://github.com/ksnimmy/txDataType
Espère que ça aide.
DÉCIMAL
CHIFFRES
angulaire directives pour valider les numéros de