2015-10-07 99 views
0

我在表单中使用input type="number"。我触发一个onchange事件来获得它的价值。带有parseInt onchange的HTML输入号码

但是当我写'2a'时,它说这个值是空的。所以我甚至无法输入parseInt()来得到'2'整数,我想要的。

它当然与input type="text"一起工作,但我也想使用数字类型的最小最大属性来简化表单验证。有没有解决这个问题的方法?

+6

''类型为“number”的元素(在支持它的浏览器中)坚持该值为有效数字。任何不是数字的东西都将被视为空值。 – Pointy

+0

正如Pointy所提到的那样,'number'类型的输入限制用户只输入数字,这样你甚至不需要在脚本中调用'parseInt()'。 – Arkantos

+0

@Arkantos,他必须设置值'value =“2a”' – Rayon

回答

0

您可以使用​​代替change做到这一点:

document.querySelector('input').addEventListener('keydown', function(e) { 
 
    var char = e.key || String.fromCharCode(e.keyCode) || String.fromCharCode(e.charCode); 
 
    if (!/[0-9]/.test(char)) { 
 
    e.preventDefault(); 
 
    } 
 
});
<input type="number" min="0" max="100" placeholder="Insert a number">

+0

max =“100”在不工作? –

+0

嗯是的,这将工作。唯一不行的将是复制粘贴,但在我的情况下,它不是必需的。 – Harderer

0

输入元素的类型号并不意味着你可以不写其他类型内的字符,只是为了使在html上下文中包含输入有效或无效的表单元素,我建议在输入中使用正则表达式或字符检查一个JavaScript函数链接到onkeydown事件,您可以控制绝对可插入的字符或不是在那个输入中。如果你使用一个框架的JavaScript,有一些功能可以帮助你,在其他情况下,你可以自己编写一个JavaScript函数。 例如,这是一个允许正数和负数的整数/小数的正则表达式。

"^[-+]?([0-9]+(\.[0-9]*)?|\.[0-9]+)$"