Est-il possible de mettre en place un input
qui permet de taper uniquement des chiffres à l'intérieur sans manipulation manuelle de event.target.value
?
Dans React, il est possible de définir value
et, par la suite, la modification de l'entrée sera fondamentalement liée à la valeur (il n'est pas possible de la modifier sans la propriété value
changement). Voir exemple . Et cela fonctionne très bien sans aucun effort.
Dans Angular 2, il est possible de définir [value]
mais il ne fera que fixer la valeur au départ, et par la suite input
n'est pas empêché de procéder à des modifications.
Je jouais avec ngModel
y [value] / (input)
voir exemple .
Mais dans les deux cas, il y a un problème essentiel :
- lorsque vous tapez 10 (la valeur du modèle est 10 ; la valeur d'entrée est 10) - correct
- lorsque vous tapez 10d ensuite (la valeur du modèle est 10 - non modifiée, tous les chiffres manquants ont été supprimés ; la valeur d'entrée est 10d) - incorrect, car la valeur du modèle est la même que précédemment.
- lorsque vous tapez 10d3 - (la valeur du modèle est 103 ; la valeur d'entrée est 103) - correct
Comment faire ce composant simple (à première vue), sans manipuler manuellement event.target.value
?...
UPDATE Je ne cherche pas de HTML5 natif input[number]
élément ici. L'entrée des chiffres ici est juste pour l'exemple - il pourrait y avoir beaucoup plus de tâches où j'ai besoin de restreindre le texte d'entrée.
De plus, input[number]
est 1) ne m'empêche pas de taper 10ddd
et 2) (moins important) contient des flèches dont je n'ai pas besoin.
Et le problème ici est de prevenir l'utilisateur de taper quelque chose au-delà des valeurs restreintes, au lieu de permettre pour saisir quoi que ce soit et valider après coup
5 votes
Je déteste qu'on doive toujours avoir cette discussion. A un moment donné, nous avons besoin d'une entrée standard qui fasse ça tout de suite. Elle devrait accepter combien de chiffres, sans vous permettre d'entrer des caractères, négatifs ou non. Je sais qu'il existe un machin numérique HTML 5, mais nous n'avons pas encore atteint le nirvana. Je suis fatigué de devoir écrire ce code pour chaque framework, etc.
0 votes
Ce problème peut être résolu avec la réponse donnée dans le document : stackoverflow.com/questions/41465542/
0 votes
Pour l'amour de Dieu ne faites pas ça à moins que vous ne détestiez vos utilisateurs. Toujours permettre une entrée libre et vérifier/nettoyer plus tard. Si vous faites cela, vous, l'utilisateur de l'OS, créerez probablement un champ inaccessible. Est
tab
une touche numérique ? Qu'en est-ilctrl-v
? Non ? Oups, l'utilisateur est maintenant coincé dans votre champ parce que vous venez de tout empêcher. - Au lieu de cela, facilitez les choses en définissant le bon type d'entrée, puis en définissant une balisepattern
pour le valider, et c'est tout.