1102 votes

Existe-t-il un type de saisie flottante en HTML5 ?

Selon html5.org l'attribut "value" du type d'entrée "number", s'il est spécifié et non vide, doit avoir une valeur qui est un nombre à virgule flottante valide".

Pourtant, il s'agit simplement (dans la dernière version de Chrome, en tout cas) d'un contrôle "updown" avec des entiers, et non des flottants :

<input type="number" id="totalAmt"></input>

Existe-t-il un élément d'entrée à virgule flottante natif de HTML5, ou un moyen de faire en sorte que le type de saisie des nombres fonctionne avec des flottants et non des entiers ? Ou dois-je recourir à un plugin jQuery UI ?

2263voto

Dave Points 7854

Le site number a un step qui contrôle les nombres valides (ainsi que la valeur max et min ), qui a pour valeur par défaut 1 . Cette valeur est également utilisée par les implémentations pour les boutons pas à pas (c'est-à-dire qu'en appuyant sur le haut, on augmente de step ).

Il suffit de modifier cette valeur comme bon vous semble. Pour l'argent, deux décimales sont probablement attendues :

<input type="number" step="0.01">

(J'ai aussi mis min=0 si elle ne peut être que positive)

Si vous préférez autoriser un nombre quelconque de décimales, vous pouvez utiliser la fonction step="any" (bien que pour les devises, je recommande de s'en tenir à 0.01 ). Dans Chrome et Firefox, les boutons de pas à pas s'incrémentent ou se décrémentent de 1 lorsqu'ils sont utilisés. any . (merci à la réponse de Michal Stefanow pour l'avoir fait remarquer any et voir la spécification pertinente ici )

Voici un terrain de jeu montrant comment les différentes étapes affectent les différents types d'entrée :

<form>
  <input type=number step=1 /> Step 1 (default)<br />
  <input type=number step=0.01 /> Step 0.01<br />
  <input type=number step=any /> Step any<br />
  <input type=range step=20 /> Step 20<br />
  <input type=datetime-local step=60 /> Step 60 (default)<br />
  <input type=datetime-local step=1 /> Step 1<br />
  <input type=datetime-local step=any /> Step any<br />
  <input type=datetime-local step=0.001 /> Step 0.001<br />
  <input type=datetime-local step=3600 /> Step 3600 (1 hour)<br />
  <input type=datetime-local step=86400 /> Step 86400 (1 day)<br />
  <input type=datetime-local step=70 /> Step 70 (1 min, 10 sec)<br />
</form>

Comme d'habitude, j'ajouterai une petite note : n'oubliez pas que la validation côté client n'est qu'une commodité pour l'utilisateur. Vous devez également valider du côté du serveur !

2 votes

Pour répondre à l'édition de @Elfayer : les guillemets sont facultatifs en HTML, sauf si vous voulez utiliser certains caractères. Personnellement, je préfère les omettre lorsque cela est possible pour une meilleure lisibilité.

9 votes

Cela ne fonctionne pas correctement dans les dernières versions de Firefox : bugzilla.mozilla.org/show_bug.cgi?id=1003896

1 votes

Pour résumer ce bogue, FireFox tronque maintenant les 0 lorsque cela est possible, donc 4.10 apparaîtra comme 4.1 . Ce comportement reste techniquement correct (la spécification exige simplement qu'il affiche une représentation appropriée en virgule flottante), mais c'est une mauvaise interface utilisateur dans le cas de la monnaie. J'encourage les gens à voter pour ce bogue. On dirait qu'ils pourraient pousser pour un nouvel attribut standard pour contrôler l'affichage.

195voto

Michal Stefanow Points 1223

Via : http://blog.isotoma.com/2012/03/html5-input-typenumber-and-decimalsfloats-in-chrome/

Mais que faire si vous voulez que tous les nombres soient valides, qu'ils soient entiers ou décimaux ? Dans ce cas, définissez l'étape à "n'importe quel".

<input type="number" step="any" />

Cela fonctionne pour moi dans Chrome, pas testé dans d'autres navigateurs.

6 votes

Chrome => Fonctionne parfaitement Safari => N'affiche pas de message d'erreur, et si ce n'est pas le numéro, il ne passera pas au serveur IE => Version inférieure à 10 pas, fonctionne

7 votes

Malheureusement, dans chrome, il est possible d'entrer plusieurs décimales, par exemple une adresse IP.

1 votes

Andy, les nouvelles versions de chrome ont corrigé ce problème. Ce devrait être la réponse acceptée de nos jours.

32voto

user878598 Points 23

Vous pouvez utiliser :

<input type="number" step="any" min="0" max="100" value="22.33">

26voto

Andrei Thuler Points 219

Vous pouvez utiliser l'attribut step pour le numéro du type d'entrée :

<input type="number" id="totalAmt" step="0.1"></input>

step="any" autorisera toute décimale.
step="1" n'autorisera aucune décimale.
step="0.5" permettra 0.5 ; 1 ; 1.5 ; ...
step="0.1" permettra 0,1 ; 0,2 ; 0,3 ; 0,4 ; ...

13voto

user2133240 Points 1

Sur la base de ce réponse

<input type="text" id="sno" placeholder="Only float with dot !"   
   onkeypress="return (event.charCode >= 48 && event.charCode <= 57) ||  
   event.charCode == 46 || event.charCode == 0 ">

Signification :

Code char :

  • 48-57 égal à 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
  • 0 est Backspace (sinon il faut rafraîchir la page sur Firefox)
  • 46 est dot

&& est AND , || est OR opérateur.

si vous essayez de flotter avec une virgule :

<input type="text" id="sno" placeholder="Only float with comma !"   
     onkeypress="return (event.charCode >= 48 && event.charCode <= 57) ||  
     event.charCode == 44 || event.charCode == 0 ">

Prise en charge de Chromium et Firefox (Linux X64) (les autres navigateurs, je n'existe pas.)

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