一致的keyCode为`#`

时间:2013-06-19 09:57:15

标签: javascript jquery input

虽然我知道由于e.keyCode vs e.charCode而捕获密钥并非易事,但我认为jQuery几乎可以将这些不一致的大部分归一化。

然而,虽然answering this question我发现字符#似乎有非常不一致的keyCodes(当然,对于其他几个代码也是如此,主要取决于我猜的浏览器和键盘布局)

Chrome和IE在我的计算机上产生了191,Firefox 163,另一个用户报告了222. Chromes window.event甚至报告U+00BF为keyIdentifier - 根据unicode表应为¿。< / p>

您是否知道任何一致的方法来确定像#这样的符号,如果键盘代码不一致,而不会像下面那样做出令人讨厌的事情:

$('input').keydown(function (e) {
        if (e.which == 191 || e.which == 163 || e.which == 222){
            // hope you got the right key
            e.preventDefault();
        }
});

Fiddle for your pleasure.

2 个答案:

答案 0 :(得分:7)

这适用于使用美式键盘的Chrome和Firefox:

$('[id$=txtClient]').keypress(function (e) {
    if (String.fromCharCode(e.which) == '#') {
        e.preventDefault();
    }
});

keypress是唯一能为您提供有关输入的字符的可靠信息的事件。

演示: http://jsfiddle.net/elclanrs/ebcet/9/

答案 1 :(得分:0)

您是否尝试过使用keypress活动?

documentation警告平台之间可能出现的行为差异。

至少在Firefox中,e.which对应于转换后输入字符的ascii代码:

$('#txtClient').keypress(function (e) {
    console.log('keypress:', e.which);
    if (e.which == 35) {
        return false;
    }
});

updated fiddle