我有一个数字输入,我希望用户无法插入任何非数字字符。我们已经通过多种方式尝试了这一点:
我们开始删除模糊中的所有非数字字符:
$(my_input).blur(function() {
$(this).val($(this).val().replace(/[^\d]/, '')
}
上面代码的问题是,如果输入无效,则数字字段的val
函数返回空字符串。我们明确地想要一个数字字段,因为我们的网站将用于移动设备。
我更喜欢的选项是使用keydown
事件:
$(my_input).keydown(function(e) {
if (e.shiftKey === true ) {
if (e.which == 9) {
return true;
}
return false;
}
if (e.which > 57) {
return false;
}
if (e.which==32) {
return false;
}
return true;
});
以上作品几乎都是一种魅力。问题是:
数字键盘未包含在某个范围内 - 但这可以轻松修复,并且不是此问题的主题。
对于我不知道的原因,iOS上的js使用不同的密码,因此这不适用于大部分手机,iPad等。这是一个交易破坏者。
所以问题 - 是否有任何方法可以确定哪个键实际按下keydown
事件。我已经看到了许多类似的问题,但它们都没有涵盖这些iOS差异。我注意到这个活动有一个关键词'物业,但我不确定这个物业有多可靠。
答案 0 :(得分:1)
编辑:我落在这篇帖子上,这可能是解决问题的一种巧妙方法: JavaScript: Avoiding hardcoded keycodes
归结为
var digitCodes = "0123456789".split('').map(function (x) { return x.charCodeAt(0); });
可能有更好的方法可以执行此操作,但您可以检测设备是否正在运行iOS(c.f。Detect if device is iOS)并使用相应的密钥代码(c.f。http://notes.ericjiang.com/posts/333)。
var digitCodes;
if (isiOS()) {
digitCodes = keycodes.ios;
}
else {
digitCodes = keycodes.default;
}
if (digitCodes.indexof(e.which) != -1) {
...
}
像这样......
答案 1 :(得分:0)
你可以这样试试
示例文本框
<input type="text" name="sample" id="sample" onkeyup="positiveNumericOnly(this);" />
JS代码
function positiveNumericOnly(ele)
{
tempVal = ele.value.replace(/[^\d]/g, "");
if(tempVal != ele.value)
ele.value = tempVal;
}