一致的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; } });
更新小提琴