4

我正在尝试将文本输入的输入限制为仅数字。我为 jquery keydown() 设置了一个事件处理程序,如下所示。它可以在我测试过的桌面浏览器以及 iOS 上的移动 safari 和 chrome 上按预期工作。但我在 Nexus 7 上的 chrome 中遇到了一些问题。

function keyDownHandler( e ) {

    e.stopImmediatePropagation();

    if( !e.shiftKey && !e.altKey && !e.ctrlKey ) {

        var key = e.which || e.keyCode;

        if( key >= 48 && key <= 57 || 
            key >= 96 && key <= 105 || 
            key == 8 || key == 9 ||
            key == 37 || key == 39 ||
            key == 46 || key == 45 ) {

            return true;
        }

        if( key == 13 ) {
            //returned pressed, do something
        }
    }

    e.preventDefault();

    return false;
};

与 android 软键盘相关的已知错误似乎很少,因此每个键都返回相同的 keycode 值。该值也因设备而异,但对于 nexus 7,它是 229。数字键也间歇性地返回正确的键码值,这很好。我应该能够添加一些捕获所有逻辑来处理这个问题,但我坚持的问题是,即使这个方法返回 false 并调用 e.preventDefault(),它也不会阻止字符出现在文本中输入?

我做错了什么,需要调用其他东西来取消 android chrome 上的事件还是这是一个错误?

需要注意的是,它在 Nexus 7 上的 firefox 和 dolphin 中运行良好,而不是在 chrome 或 opera 中出现同样的问题。

谢谢。

4

0 回答 0