5

虽然我知道由于e.keyCodevs捕获键e.charCode并非易事,但我认为 jQuery 几乎能够规范大多数这些不一致。

然而,在回答这个问题时,我发现这个角色#似乎有非常不一致的 keyCodes(当然,其他几个代码也是如此,主要取决于我猜的浏览器和键盘布局)。

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

您是否知道任何一致的方法来确定此类符号(例如#具有不一致的 keyCodes)而无需执行以下讨厌的操作:

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

为您的乐趣小提琴。

4

2 回答 2

7

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

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

keypress是唯一可以为您提供有关所输入角色的可靠信息的事件。

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

于 2013-06-19T10:03:28.783 回答
0

您是否尝试过使用该keypress事件?

文档警告平台之间可能存在的行为差异。

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

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

更新的小提琴

于 2013-06-19T10:14:03.860 回答