一致的keyCode为`#`

虽然我知道由于e.keyCode vs e.charCode捕获密钥并不简单,但我认为jQuery几乎能够规范化大多数这些不一致性。

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

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

你知道任何一致的方法来确定这样的符号,比如#with不一致的keyCodes,而不做如下的令人讨厌的事情:

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

小提琴,为你的乐趣。

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

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

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

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

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

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

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

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

更新小提琴