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

B. *_*non 741 floating-point html5 input

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

然而它简直(在最新版本的Chrome中,无论如何),一个带有整数的"updown"控件,而不是浮点数:

<input type="number" id="totalAmt"></input>
Run Code Online (Sandbox Code Playgroud)

是否存在HTML5原生的浮点输入元素,或者使数字输入类型与浮点数一起使用的方法,而不是整数?或者我必须使用jQuery UI插件?

Dav*_*ave 1526

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

只需将此值更改为适当的值即可.为了钱,可能需要两位小数:

<input type="number" step="0.01">
Run Code Online (Sandbox Code Playgroud)

(我也会设置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>
Run Code Online (Sandbox Code Playgroud)


像往常一样,我会添加一个快速注释:请记住,客户端验证只是方便用户.您还必须在服务器端验证!

  • 其次,虽然你可能会担心哪些字符很好而哪些字符不合适,但是你身后的开发人员可能不会.那就要求他们要么承受为你没有引用或更糟糕的所有属性添加引号的艰巨任务,只需在代码中引入问题,他们甚至可能不了解代码的来源.最后,因为有时你会*使用引号,所以代码看起来与引用的某些属性不一致而其他属性则不一致. (9认同)
  • @Dave:是的,从技术上讲,省略引号是好的,它引入了许多潜在的问题.首先,在不同的浏览器及其版本中以不同方式处理字符的子集.如果您选择不使用引号,那么您必须时刻意识到哪些字符会在每个浏览器和版本中引起问题.如果你只是使用引号,这就是一些专注于某些事情的精神力量.(续) (7认同)
  • 这在最新版本的Firefox中无法正常工作:https://bugzilla.mozilla.org/show_bug.cgi?id = 1003896 (5认同)
  • @relipse 请参阅此处:http://stackoverflow.com/q/3790935/1180785 但请务必阅读每个答案的评论;看起来所有选项都有缺点,你需要看看什么适合你的特定需求。 (3认同)
  • 回应@Elfayer 的编辑:引号在 HTML 中是可选的,除非您想使用某些字符。我个人更喜欢在可能的情况下省略它们以获得更好的可读性。 (2认同)
  • 人们真的应该记住并学习使用 XHTML 标准......它回答了像引号这样的简单问题......很多很多年前我强迫自己学习这些标准...... https://www.w3.org /TR/xhtml1/#h-4.4 `所有属性值都必须被引用,即使是那些看起来是数字的值。`省略引号只是自找麻烦..如果你有动态内容/值,更是如此.. (2认同)

Mar*_*son 139

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

但是,如果您希望所有数字都有效,整数和小数相同怎么办?在这种情况下,将步骤设置为"任何"

<input type="number" step="any" />
Run Code Online (Sandbox Code Playgroud)

在Chrome中适用于我,未在其他浏览器中测试过.

  • Chrome => Works完美Safari =>不显示错误信息,如果不是数字则不会传递给服务器IE =>版本低于10不是,有效 (4认同)
  • 不幸的是,在chrome中它允许您输入多个小数点,例如IP地址. (4认同)

小智 14

您可以使用:

<input type="number" step="any" min="0" max="100" value="22.33">
Run Code Online (Sandbox Code Playgroud)

希望有所帮助,问候


San*_*amp 9

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

<input type="number" id="totalAmt" step="0.1"></input>
Run Code Online (Sandbox Code Playgroud)

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


dsg*_*dfg 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 ">
Run Code Online (Sandbox Code Playgroud)

含义:

字符代码:

  • 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 ">
Run Code Online (Sandbox Code Playgroud)

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

  • 黑客输入,破解复制和粘贴,黑客攻击黑客=糟糕的做法.我们有2017年 (3认同)

小智 7

我刚刚遇到了同样的问题,由于法语本地化,我可以通过在数字中添加逗号而不是句号/句号来解决它。

所以它适用于:

2 没问题

2,5 没问题

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

  • 将 lang="en" 添加到输入或任何父项,它将开始使用英文数字样式 (6认同)

Kai*_*ack 7

我已经开始使用inputmode="decimal"它与智能手机完美配合:

<input type="text" inputmode="decimal" value="1.5">

请注意,我们必须使用type="text"代替number。但是,在桌面上它仍然允许将字母作为值。

对于桌面,您可以使用:

<input type="number" inputmode="decimal">

它允许0-9.作为输入并且只有数字。

请注意,某些国家/地区使用,十进制除法器,它在 NumPad 上默认激活。因此,通过 Numpad 输入浮点数将无法正常工作,因为输入字段需要 a .(在 Chrome 中)。这就是为什么您type="text"的网站上有国际用户时应该使用的原因。


您可以在桌面(也可以使用数字键盘)和手机上尝试此操作:

<p>Input with type text:</p>
<input type="text" inputmode="decimal" value="1.5">
<br>
<p>Input with type number:</p>
<input type="number" inputmode="decimal" value="1.5">
Run Code Online (Sandbox Code Playgroud)


参考:https : //developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/inputmode


Irf*_*ani 7

<input type="number" step="any">
Run Code Online (Sandbox Code Playgroud)

这对我有用,我认为这是使输入字段接受任何小数的最简单方法,无论小数部分有多长。Step 属性实际上显示输入字段应接受多少位小数点。例如,step="0.01" 只接受两位小数。


sad*_*uud 5

我这样做了

 <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">
Run Code Online (Sandbox Code Playgroud)

然后,我将min定义为0.4,最大值定义为0.7,步骤0.01:0.4,0.41,0,42 ... 0.7


小智 5

是的,这是正确答案:

step="any"
Run Code Online (Sandbox Code Playgroud)

这样效率更高。相信我。

<input type="number" step="any">
Run Code Online (Sandbox Code Playgroud)
document.getElementById('form1').addEventListener('submit', function(e){
e.preventDefault();
alert("Your nnumber is: "+document.getElementById('n1').value)
alert("This works no ? :) please upvote")
})
Run Code Online (Sandbox Code Playgroud)