Selon html5.org , l'attribut "valeur" du type d'entrée "numéro", s'il est spécifié et non vide, doit avoir une valeur qui est un nombre à virgule flottante valide. "
Pourtant, il s’agit tout simplement (dans la dernière version de Chrome, en tout cas) d’un contrôle "actualisé" avec des entiers, pas de flottant:
<input type="number" id="totalAmt"></input>
Existe-t-il un élément d’entrée en virgule flottante natif à HTML5 ou un moyen de faire en sorte que le type d’entrée numérique fonctionne avec des éléments flottants et non ints? Ou dois-je avoir recours à un plugin jQuery UI?
Le type number
a une valeur step
contrôlant quels nombres sont valides (avec max
et min
), par défaut à 1
. Cette valeur est également utilisée par les implémentations pour les boutons pas à pas (c’est-à-dire que l’appui vers le haut augmente de step
).
Changez simplement cette valeur en ce qui est approprié. Pour de l'argent, deux décimales sont probablement attendues:
<input type="number" step="0.01">
(Je définirais également min=0
s'il ne peut être que positif)
Si vous préférez autoriser un nombre quelconque de décimales, vous pouvez utiliser step="any"
(bien que pour les devises, je vous recommande de vous en tenir à 0.01
). Dans Chrome et Firefox, les boutons pas à pas augmenteront/diminueront de 1 lorsqu’on utilisera any
. (Merci à la réponse de Michal Stefanow pour avoir signalé any
, et voir les spécifications correspondantes ici )
Voici un terrain de jeu montrant comment différentes étapes affectent différents types d’entrées:
<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 note rapide: rappelez-vous que la validation côté client n'est qu'un avantage pour l'utilisateur. Vous devez également valider côté serveur!
Via: http://blog.isotoma.com/2012/03/html5-input-typenumber-and-decimalsfloats-in-chrome/
Mais que se passe-t-il si vous voulez que tous les nombres soient valides, entiers et décimaux? Dans ce cas, définissez step sur “any”
<input type="number" step="any" />
Fonctionne pour moi dans Chrome, non testé dans les autres navigateurs.
vous pouvez utiliser:
<input type="number" step="any" min="0" max="100" value="22.33">
espère aider, salutations
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 n'importe quelle décimale.step="1"
n'autorisera aucune décimale.step="0.5"
autorisera 0,5; 1; 1,5; ...step="0.1"
autorisera 0,1; 0,2; 0,3; 0,4; ...
Basé sur this answer
<input type="text" id="sno" placeholder="Only float with dot !"
onkeypress="return (event.charCode >= 48 && event.charCode <= 57) ||
event.charCode == 46 || event.charCode == 0 ">
Sens :
Code de caractère:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Backspace
(sinon besoin d'actualiser la page sur Firefox)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 ">
Chrome et Firefox pris en charge (Linux X64) (les autres navigateurs I n'existent pas.)
Je le fais
<input id="relacionac" name="relacionac" type="number" min="0.4" max="0.7" placeholder="0,40-0,70" class="form-control input-md" step="0.01">
alors, je définis min en 0.4 et max en 0.7 à l’étape 0.01: 0.4, 0.41, 0,42 ... 0.7
Je viens d'avoir le même problème, et je pourrais le résoudre en mettant juste un virgule et pas un point/point final dans le nombre à cause de localisation française.
Donc ça marche avec:
2 est OK
2,5 est OK
2.5 est KO (le nombre est considéré comme "illégal" et vous recevez une valeur vide).