Is there a float input type in HTML5?

2019-01-01 03:05发布

问题:

According to html5.org, the \"number\" input type\'s \"value attribute, if specified and not empty, must have a value that is a valid floating point number.\"

Yet it is simply (in the latest version of Chrome, anyway), an \"updown\" control with integers, not floats:

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

Is there a floating point input element native to HTML5, or a way to make the number input type work with floats, not ints? Or must I resort to a jQuery UI plugin?

回答1:

The number type has a step value controlling which numbers are valid (along with max and min), which defaults to 1. This value is also used by implementations for the stepper buttons (i.e. pressing up increases by step).

Simply change this value to whatever is appropriate. For money, two decimal places are probably expected:

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

(I\'d also set min=0 if it can only be positive)

If you\'d prefer to allow any number of decimal places, you can use step=\"any\" (though for currencies, I\'d recommend sticking to 0.01). In Chrome & Firefox, the stepper buttons will increment / decrement by 1 when using any. (thanks to Michal Stefanow\'s answer for pointing out any, and see the relevant spec here)

Here\'s a playground showing how various steps affect various input types:

<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>


As usual, I\'ll add a quick note: remember that client-side validation is just a convenience to the user. You must also validate on the server-side!



回答2:

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

But what if you want all the numbers to be valid, integers and decimals alike? In this case, set step to “any”

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

Works for me in Chrome, not tested in other browsers.



回答3:

you can use:

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

hope to help, regards



回答4:

Based on 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 \">

Meaning :

Char code :

  • 48-57 equal to 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
  • 0 is Backspace(otherwise need refresh page on Firefox)
  • 46 is dot

&& is AND , || is OR operator.

if you try float with comma :

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

Supported Chromium and Firefox (Linux X64)(other browsers I does not exist.)



回答5:

I do so

 <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\">

then, I define min in 0.4 and max in 0.7 with step 0.01: 0.4, 0.41, 0,42 ... 0.7



回答6:

You can use the step attribute to the input type number:

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

step=\"any\" will allow any decimal.
step=\"1\" will allow no decimal.
step=\"0.5\" will allow 0.5; 1; 1.5; ...
step=\"0.1\" will allow 0.1; 0.2; 0.3; 0.4; ...



回答7:

I just had the same problem, and I could fix it by just putting a comma and not a period/full stop in the number because of French localization.

So it works with:

2 is OK

2,5 is OK

2.5 is KO (The number is considered \"illegal\" and you receive empty value).