我有一个数字类型的输入,我想防止人们输入除数字之外的任何内容。我发现的例子适用于输入类型的文本字段,但不适用于数字字段。
效果良好:(
<input type="text" onkeyup="this.value=this.value.replace(/[^d]/,'')">
效果不佳:(
<input type="number" onkeyup="this.value=this.value.replace(/[^d]/,'')">
在JSFiddle 上自己试试
请帮忙。。。
我刚刚使用JSFiddle进行了一些简单的测试,如果<input type="number" />
元素上有无效输入,则this.value
属性将返回空白。
以下行显示了使用Chrome时的结果:
<input type="number" oninput="alert(this.value)">
JSFiddle演示
事实上,发生这种情况的原因是:
value属性(如果指定且不为空(必须具有值这是一个有效的浮点数。
值净化算法如下:如果元素不是有效的浮点数,然后将其设置为空字符串。
^来自HTML5草稿部分关于数字输入类型的实现
这个问题现在引起了我的兴趣,我想出了一个小办法。
<input type="number" oninput="updateNum(this)">
function updateNum(e)
{
e.select();
e.value = getSelection().toString().replace(/[^d]/g,'');
}
如果选择在命令之间更改的位置,这可能会有问题。
JSFiddle用于解决
如果您想接受带有小数部分(例如3.14(的数字,请参阅此DEMO
Number: <input type="number" oninput="updateNum(this)" />
function updateNum(e) {
if (isNaN(e.value)) {
e.value = e.value.replace(/[^d]/g,'');
}