keydown事件 - 在不同系统上按下的键

时间:2014-03-14 11:48:27

标签: javascript jquery keydown

我有一个数字输入,我希望用户无法插入任何非数字字符。我们已经通过多种方式尝试了这一点:

我们开始删除模糊中的所有非数字字符:

$(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;
    });  

以上作品几乎都是一种魅力。问题是:

  1. 数字键盘未包含在某个范围内 - 但这可以轻松修复,并且不是此问题的主题。

  2. 对于我不知道的原因,iOS上的js使用不同的密码,因此这不适用于大部分手机,iPad等。这是一个交易破坏者。

  3. 所以问题 - 是否有任何方法可以确定哪个键实际按下keydown事件。我已经看到了许多类似的问题,但它们都没有涵盖这些iOS差异。我注意到这个活动有一个关键词'物业,但我不确定这个物业有多可靠。

2 个答案:

答案 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;
}