AngularJS de saisie du numéro de vue formatée
Je veux utiliser un nombre formaté entrée pour afficher mille élément de séparation des points à l'utilisateur quand il les types de grands nombres. Ici est la directive de code que j'ai utilisé: http://jsfiddle.net/LCZfd/3/
Lorsque j'utilise input type="text"
cela fonctionne, mais lorsque je veux utiliser input type="number"
c'est bizarrement le nettoyage par quelque chose lorsque l'utilisateur de taper des grands nombres.
Quel est le problème sur input[number]
?
- Fonctionne très bien sur Chrome! Quel navigateur êtes-vous de tester ce?
- Désolé, j'ai partagé mal jsfiddle url. J'ai mis à jour maintenant.
- Je suis un peu confus sur ce que vous essayez d'accomplir, mais jetez un oeil à ceci: jsfiddle.net/LCZfd/4
- J'utilise un formulaire de saisie qui a
type="number"
attribut. L'utilisateur écrit de grands nombres. Et j'en veux pour preuve que le nombre avec des séparateurs de milliers lorsque l'utilisateur écrit. - Mon commentaire précédent (ci-dessus) montre la
,
être ajoutées le cas échéant en FF, Chrome, et IE11. Voyez-vous la même chose? - Il y a 2 entrées de la boîte. L'un est le "texte" type de et il montre
,
ajouté. Mais d'autres un "certain nombre" de type, et il est vide. C'est ça le problème. - Il n'est pas possible avec les navigateurs actuels pour mettre en œuvre des ce avec un natif
input type="number"
élément. Serait une solution qui se superpose au champ de saisie avec un séparateur de milliers dot valeur suffisante? Sinon, vous auriez à la création de votre propre "d'entrée" des éléments qui se comporte comme vous le souhaitez. - Quelque chose comme ceci: jsfiddle.net/LCZfd/6
- input type="number" prend uniquement en charge les chiffres réels, qui sont des valeurs numériques [0-9], le point décimal (.), une option moins (-) et le "e" pour la notation exponentielle. Une virgule n'est pas permis dans un certain nombre! Suffit d'utiliser input type="texte" et ont une fonction d'assistance qui traite de la séparation par virgule du texte dans nombre réel et en cas de besoin.
- Il est intéressant que je peux écrire "1 000 000 de" type=numéro en tapant, mais si j'ai mis que par une ng-model, il supprime tout. Ce qui semble certain buggy moi. Est-il normal pour vous?
- Intéressante solution de contournement. C'est peut-être acceptable si je ne peux pas trouver une meilleure solution.
- pourquoi utiliser le "nombre" de type si important pour vous? Vous pouvez traiter l'Ang fait numériquement, même si son "texte" type
- Je veux utiliser
min
etmax
attributs pour valider les gammes de valeur. Si j'utilise la saisie de texte, je dois mettre en œuvre ces validations manuellement. Aussi, dans les appareils mobiles,number
tapé entrées à taper avec spécial clavier numérique, et c'est plus pratique pour les visiteurs. - Utiliser le module suivant. Qui peut vous aider.. ngmodules.org/modules/angular-input-decimal-separator
Vous devez vous connecter pour publier un commentaire.
Comme écrit dans les commentaires,
input type="number"
ne supporte pas de rien, mais en chiffres, d'un séparateur décimal (généralement,
ou.
selon les paramètres régionaux) et-
oue
. Vous pouvez toujours entrer ce que vous voulez, mais le navigateur ne jetez n'importe quel inconnu /caractère incorrect.Cela vous laisse avec 2 options:
type="text"
et le modèle de validation commepattern="[0-9]+([\.,][0-9]+)*"
à la limite de ce que l'utilisateur peut entrer alors automatiquement le formatage de la valeur comme vous le faites dans votre exemple.type="number"
contrôles de saisie, comme montré ici.La deuxième solution utilise un supplémentaire
<label>
balise qui contient la valeur actuelle et est caché via CSS, lorsque vous vous concentrez le champ de saisie.Vous devez ajouter le
step
attribut à votrenumber
d'entrée.Cela permettra de floating points.
http://jsfiddle.net/LCZfd/1/
Aussi, je vous recommande de revoir le bug fil sur
number
entrées dans Firefox. Vous pourriez envisager de pas l'utilisation de ce type d'entrée, comme elle a été finalement pris en charge dans ce version de FF.Toutes ces années plus tard, il n'y a pas une solution HTML5 hors de la boîte pour cela.
Je suis en utilisant
<input type="tel">
ou<input type="text">
("tel" apporte un clavier numérique sur Android et iOS, qui dans certains cas est un bonus.)Puis j'avais besoin d'une directive:
$parsers
etkeyup
pour définirelem.val()
et$formatters
pour régler l'affichage...ng-model
un nombre à virgule flottanteLa directive exemple ci-dessous fait cela, et il accepte les négatifs et les nombres à virgule flottante, sauf si vous spécifiez que vous souhaitez seulement positif ou entiers.
Ce n'est pas la solution complète je le voudrais, mais je pense qu'il comble le fossé.
HTML
JAVASCRIPT
https://jsfiddle.net/benlk/4dto9738/
Vous ne pouvez pas utiliser les valeurs avec
,
parce quetype=number
ne prend que des chiffres, l'ajout d'une virgule rend une chaîne de caractères.Voir http://jsfiddle.net/LCZfd/5
Vous êtes mieux de faire vos propres contrôles si vous voulez des virgules. L'un avec une vraie valeur (le nombre) et une valeur d'affichage (de la chaîne).
type=number
en tapant, mais si j'ai mis que par une ng-model, il supprime tout. Ce qui semble certain buggy moi. Est-il normal pour vous?vous pouvez l'essayer, j'ai modifié la directive j'ai vu ici...
Comment faire pour empêcher une entrée pour accepter uniquement les numéros? ...
voici la modification de la directive j'ai fait... Cette directive utilise l'événement keyup pour modifier l'entrée à la volée...
};
vous utilisez comme ça ...