437 votes

Comment puis-je définir la longueur maximale d'un élément HTML5 "input type=number" ?

Pour <input type="number"> élément, maxlength ne fonctionne pas. Comment puis-je restreindre le maxlength pour cet élément numérique ?

5 votes

Pour les personnes qui recherchent une meilleure solution, celle-ci est la meilleure : stackoverflow.com/questions/9361193/

5 votes

L'attribut max ne fonctionne pas dans le navigateur chrome sur la tablette Android.

4 votes

@ÜnsalKorkmaz : cette solution a l'inconvénient de ne pas faire apparaître le pavé numérique sur les appareils Android.

409voto

Krister Andersson Points 9788

Et vous pouvez ajouter un max qui spécifiera le nombre le plus élevé possible que vous pouvez insérer.

<input type="number" max="999" />

si vous ajoutez à la fois un max et un min vous pouvez spécifier la plage des valeurs autorisées :

<input type="number" min="1" max="999" />

Ce qui précède sera toujours no empêcher un utilisateur de saisir manuellement une valeur en dehors de la plage spécifiée. Au lieu de cela, une fenêtre popup s'affichera pour lui demander de saisir une valeur comprise dans cette plage lors de la soumission du formulaire, comme le montre cette capture d'écran :

enter image description here

4 votes

Krister, ça a marché. De plus, comme @Andy l'a dit, j'ai utilisé le oninput pour découper les nombres supplémentaires. Référence mathiasbynens.be/notes/oninput

7 votes

@Prasad - Si la réponse d'Andy est correcte, sélectionnez-la, au lieu de la réponse la plus votée.

97 votes

Ceci est correct, mais il faut noter qu'Andy précise que cela n'empêche pas de taper un numéro plus long. Ce n'est donc pas vraiment l'équivalent de la longueur maximale dans un champ de texte.

128voto

Andy E Points 132925

Vous pouvez spécifier le min y max qui n'autorisent la saisie que dans une plage spécifique.

<!-- equivalent to maxlength=4 -->
<input type="number" min="-9999" max="9999">

Toutefois, cela ne fonctionne que pour les boutons de commande de la toupie. Bien que l'utilisateur puisse être en mesure de taper un nombre supérieur à la limite autorisée, le bouton de contrôle de la tournette ne fonctionne pas. max le formulaire ne sera pas soumis.

Chrome's validation message for numbers greater than the max
Capture d'écran prise de Chrome 15

Usted peut utiliser le HTML5 oninput en JavaScript pour limiter le nombre de caractères :

myInput.oninput = function () {
    if (this.value.length > 4) {
        this.value = this.value.slice(0,4); 
    }
}

14 votes

Un problème possible avec cette approche JavaScript : Elle peut ne pas fonctionner comme prévu si le point d'insertion ne se trouve pas à la fin de la valeur. Par exemple, si vous saisissez la valeur "1234" dans le champ de saisie, puis déplacez le point d'insertion au début de la valeur et tapez "5", vous obtenez la valeur "5123". C'est différent d'un champ input type="text" avec une longueur maximale de 4, où le navigateur ne vous laissera pas taper un 5e caractère dans le champ "full", et la valeur restera "1234".

0 votes

Andy, il est évident que la question est de trouver un moyen non-JS de faire maxlength .............

5 votes

@Pacerier : est-ce que quelque chose dans ma réponse a laissé entendre que je pensais autrement ? Comme vous pouvez le constater, j'ai proposé la solution la plus proche possible de ce que l'on peut obtenir en utilisant uniquement le langage HTML, ainsi qu'une suggestion supplémentaire qui utilise JavaScript lorsque le PO aurait voulu empêcher l'utilisateur de taper plus de caractères que ce qui est autorisé.

92voto

Duane13 Points 595

Si vous êtes à la recherche d'un Web mobile dans laquelle vous souhaitez que votre utilisateur dispose d'un pavé numérique plutôt que d'un clavier complet. Utilisez type="tel". Il fonctionnera avec maxlength, ce qui vous évitera de créer du javascript supplémentaire.

Max et Min permettra toujours à l'utilisateur de saisir des nombres supérieurs à Max et Min, ce qui n'est pas optimal.

3 votes

Excellente découverte, cela a fonctionné à merveille, merci de ne pas avoir à créer le javascript supplémentaire.

10 votes

J'ai constaté que ce n'est pas la meilleure solution pour la saisie numérique, car la saisie "tel" permet d'ajouter des symboles et affiche des lettres à côté de chaque chiffre. Le clavier purement numérique est beaucoup plus propre.

0 votes

@hawkharris Vous avez raison, type="number" est l'interface utilisateur la plus propre. Il est plus facile de saisir accidentellement un mauvais caractère. Une validation supplémentaire est donc nécessaire pour s'assurer que l'utilisateur ne saisit pas de mauvaises données. Mais il faut également tenir compte du fait que l'utilisateur pourrait tout aussi bien saisir tous les points décimaux avec un clavier numérique. En outre, cela ne résout pas la question ci-dessus sans JavaScript supplémentaire.

89voto

DRS David Soft Points 193

Vous pouvez combiner tous ces éléments comme ceci :

<input name="myinput_drs"
oninput="maxLengthCheck(this)"
type = "number"
maxlength = "3"
min = "1"
max = "999" />

<script>
  // This is an old version, for a more recent version look at
  // https://jsfiddle.net/DRSDavidSoft/zb4ft1qq/2/
  function maxLengthCheck(object)
  {
    if (object.value.length > object.maxLength)
      object.value = object.value.slice(0, object.maxLength)
  }
</script>

Mise à jour :
Vous pourriez également vouloir empêcher la saisie de tout caractère non numérique, car object.length serait une chaîne vide pour les entrées numériques, et sa longueur serait donc de 0 . Ainsi, le maxLengthCheck ne fonctionnera pas.

Solution :
Voir este o este par exemple.

Démo - Voir la version complète du code ici :
http://jsfiddle.net/DRSDavidSoft/zb4ft1qq/1/

Mise à jour 2 : Voici le code de mise à jour : https://jsfiddle.net/DRSDavidSoft/zb4ft1qq/2/

Mise à jour 3 : Veuillez noter que le fait d'autoriser la saisie de plus d'un point décimal peut perturber la valeur numérique.

0 votes

C'est une bonne solution, mais je trouve que object.value.length renvoie 0 si des valeurs non numériques sont saisies.

1 votes

@AndrewSpear C'est parce que object.value serait une chaîne vide si vous saisissez des valeurs non numériques dans des entrées dont le type est 'number'. Voir la documentation. Veuillez également lire ma mise à jour afin de corriger ce problème.

1 votes

Cela ne fonctionne toujours pas si vous saisissez plus d'un point décimal, comme 111..1111. N'utilisez pas ce code pour la sécurité, car un code malveillant peut toujours passer à travers.

32voto

Maycow Moura Points 21

C'est très simple, avec un peu de javascript, vous pouvez simuler une maxlength vérifiez-le :

//maxlength="2"
<input type="number" onKeyDown="if(this.value.length==2) return false;" />

14 votes

Avec votre solution, vous ne pouvez plus utiliser le retour arrière une fois que vous avez atteint 2 caractères. Mais il me manque quelques éléments pour que la solution soit fonctionnelle.

14 votes

Au lieu de onKeyDown, vous devriez utiliser onKeyPress.

1 votes

Ne fonctionnera pas si vous mettez le texte en surbrillance et appuyez sur un caractère (c'est-à-dire pour remplacer le contenu de l'entrée)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X