HTML5中是否有浮点输入类型?


816

根据html5.org的说法,“数字”输入类型的“值属性,如果指定且不为空,则必须具有一个有效浮点数的值”。

但这只是简单的(无论如何,在最新版的Chrome中),是带有整数而不是浮点数的“上下”控件:

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

是否有HTML5固有的浮点输入元素,或使数字输入类型适用于浮点而不是整数的方法?还是我必须诉诸jQuery UI插件?

Answers:


1659

number类型具有一个step值,该值控制哪些数字有效(以及maxmin),默认为1。此值也被实现用于步进按钮(即,按增加step)。

只需将此值更改为适当的值即可。为了赚钱,可能期望两位小数:

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

min=0如果它只能是正数,我也会设置)

如果您希望允许小数位数,可以使用step="any"(尽管对于货币,我建议坚持使用0.01)。在Chrome和Firefox中,当使用时,步进按钮将增加/减少1 any。(感谢Michal Stefanow指出的答案any,并在此处查看相关规范

这是一个游乐场,显示了各个步骤如何影响各种输入类型:

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


像往常一样,我将简要说明一下:请记住,客户端验证对用户来说只是一种便利。您还必须在服务器端进行验证!


1
要响应@Elfayer的编辑:除非您要使用某些字符,否则引号在HTML中是可选的。就个人而言,我希望尽可能地省略它们,以提高可读性。
戴夫

5
在最新版本的Firefox中无法正常工作:bugzilla.mozilla.org/show_bug.cgi?
id=1003896

7
@戴夫:是的,从技术上讲,省略引号是可以的,但它会引入许多潜在的问题。首先,在不同的浏览器及其版本中,字符子集的处理方式有所不同。如果您选择不使用引号,那么您必须不断意识到哪些字符会在每个浏览器和版本中引起问题。如果您只使用引号,那么很多精力都花在了根本不需要担心的事情上。(续)
克里斯·普拉特

9
其次,虽然您可能会担心哪些字符合适而哪些字符不合适的规则感到担忧,但后面的开发人员可能不会。这就要求他们要么忍受繁重的任务,要么在所有未加引号的属性上加上引号,要么更糟糕的是,将简单的问题引入代码中,他们甚至可能不理解其来源。最后,由于有时您必须使用引号,因此代码看起来与某些引用的属性不一致,而另一些则没有。
克里斯·普拉特

2
@relipse,请参见此处:stackoverflow.com/q/3790935/1180785,但请务必阅读每个答案的注释;似乎所有选项都有缺点,您需要查看适合您的特定需求的选项。
戴夫

153

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

但是,如果您希望所有数字都是有效的(整数和小数都一样),该怎么办?在这种情况下,将步骤设置为“任意”

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

在Chrome浏览器中对我有效,未经其他浏览器测试。


4
Chrome =>完美的Safari浏览器=>不会显示错误消息,并且如果没有编号,它将不会传递到服务器IE =>版本小于10的版本无法正常工作
Abhi

4
不幸的是,在chrome中,它允许您输入多个小数点,例如IP地址。
安迪

18

您可以使用:

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

12

您可以将step属性用于输入类型编号:

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

step="any"将允许任何小数。
step="1"将不允许小数。
step="0.5"将允许0.5; 1; 1.5; ...
step="0.1"将允许0.1; 0.2; 0.3; 0.4; ...


8

根据这个答案

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

含义:

字符代码:

  • 48-57等于 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
  • 0是Backspace(否则需要Firefox上的刷新页面)
  • 46是 dot

&&AND||OR运算符。

如果您尝试使用逗号浮动:

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

支持的Chromium和Firefox(Linux X64)(我不存在其他浏览器。)


感到落后。在字段中复制粘贴如何?
火星罗伯逊


4
hack进行输入,hack进行复制和粘贴,hack于hack之上=不良做法。我们有2017年
火星罗伯逊,

您在哪里读取任何密码输入?课后谁在乎使用哪种方法?不,我们有1856年!尝试其他用户!
dsgdfg

听起来太复杂了,但是,与未提及的其他方法相比,这种方法的推理能力
很强

6

我这样做

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

然后,我在步骤0.01中定义最小值为0.4,最大值为0.7:0.4、0.41、0.42 ... 0.7


4

我也遇到了同样的问题,由于法国本地化,我可以只用逗号而不是句号 / 句号来解决问题。

因此它适用于:

2还可以

2,5还可以

2.5是KO(数字被视为“非法”,并且您收到空值)。


3
将lang =“ en”添加到输入或任何父项中,它将开始使用英文数字样式
user1040495
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.