如何避免输入类型编号中的十进制值

Kum*_*mar 38 html5

如何避免在HTML5中输入Number的十进制值.目前,它允许用户键入十进制值.

kne*_*eki 50

提供答案的替代方法是在输入中监控按键.我个人喜欢把type="number"它留作属性.这是一个JSFiddle

<form action="#" method="post">
  Numbers: <input name="num" 
                  type="number"
                  min="1"
                  step="1"
                  onkeypress="return event.charCode >= 48 && event.charCode <= 57"
                  title="Numbers only">
  <input type="submit">
</form>
Run Code Online (Sandbox Code Playgroud)

  • 看起来这也会禁用FireFox中的退格键和删除键,这在编辑输入字段时并不理想. (9认同)
  • 您仍然可以右键单击粘贴以注入其他输入. (4认同)

Ste*_*r16 25

我最终检查了用户是否输入了一段时间,然后阻止了该事件的传播。

编辑:更好的方法。按键事件已被弃用。还添加到正则表达式中以去除粘贴时除数字 [0-9] 之外的所有内容。

<input type="number" onkeydown="if(event.key==='.'){event.preventDefault();}"  oninput="event.target.value = event.target.value.replace(/[^0-9]*/g,'');">
Run Code Online (Sandbox Code Playgroud)

小心实验。仅部分适用于 chrome:想看看一种很好的方法来抓取粘贴的值,将所有内容都剥离出来,然后将其正常放入输入中。使用上述方法,您依靠事件顺序来更正输入,然后理想情况下会触发任何事件侦听器。onpaste 方法将在输入事件触发之前触发,因此您可以保持事件流正确。然而,当只用数字替换字符串时,小数点仍然会潜入。当我找到更好的解决方案时,希望更新它。

<input type="number" onkeydown="if(event.key==='.'){event.preventDefault();}" onpaste="let pasteData = event.clipboardData.getData('text'); if(pasteData){pasteData.replace(/[^0-9]*/g,'');} " >
Run Code Online (Sandbox Code Playgroud)

  • 这是一个完美的解决方案。不管怎样,这只是给 Angular 开发者的一个提示。输入字段上不允许使用 onpaste,您必须使用 (paste),其功能与 onpaste 相同。此外,不要在 onkeydown 中使用 event.*,因为正如 Steven 所说,它已被弃用。相反,我建议在 Angular 应用程序上使用 $event ,它的作用与事件相同 (3认同)

Dee*_*ran 14

使用模式属性

<input type="number" name="num" pattern="[0-9]" title="Numbers only">
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请访问http://www.w3schools.com/tags/att_input_pattern.asp

小提琴

  • 只是一个注释:这似乎只是在提交输入所在的表单时验证; 它不会阻止十进制输入,也不表示在提交表单之前字段出错. (11认同)
  • 次要说明:1.0将返回有效,可能会或可能不会更正,具体取决于您的需要. (4认同)
  • 不起作用,因为我想检查用户键入时是否不包含小数。 (3认同)

小智 10

使用 parseInt() 的简单示例

<input type="number" oninput="this.value=(parseInt(this.value)||0)" placeholder="0-9" autofocus='' value='0' />
Run Code Online (Sandbox Code Playgroud)


Nig*_*Fds 9

根据此处的其他答案,我尝试了以下操作:

<input id="storeId" min="0" pattern="[0-9]" onkeypress="return !(event.charCode == 46)" step="1" title="Must be an integer number" type="number" >
Run Code Online (Sandbox Code Playgroud)

我只是阻止了点的输入,但这同样不会阻止粘贴。

ASCII 点。字符是 46


Kak*_*isk -1

提问时您应该发布您尝试过的内容。

要仅使用整数,请更改以下属性。

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

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

  • 使用步骤属性仍然允许用户输入十进制值。就像数字字段不允许用户输入字母一样,有什么方法可以限制用户输入浮点值 (23认同)