大多数Web开发人员都知道,要仅将数字限制为表单输入,您可以执行以下操作:
$(function() {
$("#foobar").keypress(function(e) {
if($.inArray(e.which, range(48, 57)) == -1) {
e.preventDefault();
return false;
}
});
});
function range(start, end) {
var range = [];
for(var i = start; i <= end; i++) {
range.push(i);
}
return range;
}
不幸的是,这并没有完全通过默认浏览器在Android上完成工作。 ( iPhone和其他Android浏览器尚未经过测试,因此可能会遇到同样的问题。在没有此问题的iPhone 4S上进行测试。)
在Android上,假设您首先键入“f”。什么都没发生。真棒。等一下。然后键入“a”。怎么了? “f”放入输入字段!键入“c”,将“a”放入字段中。等等。无论先前输入的角色是什么,这就是投入到现场的内容。
Here's a jsFiddle that demonstrates the issue.
小提琴在桌面上运行良好,但在Android(手机或模拟器)上试用。我已经使用Android 2.3.6和2.2进行了测试。
之前有人碰到过吗?任何方向将不胜感激!目前,解决方法是立即删除非数字字符(在keyup
事件中)。
更新 Here is a fiddle表示正在联系preventDefault()
。问题似乎是,而不是阻止,它只是推迟(直到下一个事件)。
答案 0 :(得分:2)
完全不同的方法是使用<input type="number">
并依靠浏览器提供适当的界面/过滤(移动浏览器易于使用)。它没有修复代码,但应该规避问题,这看起来像一个bug,说实话。
答案 1 :(得分:1)
一个疯狂的猜测:也许Androids在keydown
阶段注册输入。你可以试试这两个事件。
答案 2 :(得分:0)
好的,我玩了一下,这对我的andriod运行正常:
var reserved = [0,8]
$(function()
{
$("#foobar").keypress(function(e)
{
if($.inArray(e.which, reserved) < 0 && ((e.which < 48) || (e.which > 57)))
{
e.preventDefault();
return false;
}
});
});
http://jsfiddle.net/HW794/1/embedded/result/
可能droid不喜欢fn的调用? (范围)