jQuery的keypress()事件不发射?

我正尝试用jQuery向右和向左箭头键按下事件。 使用下面的代码,我可以触发任何字母数字键上的事件,但光标键(上,下,左,右)不会触发。 我正在开发该网站主要是为了IE用户,因为它是一个业务线应用程序。 我在这里做错了什么?

$('document').keypress(function(e){ switch (e.which) { case 40: alert('down'); break; case 38: alert('up'); break; case 37: alert('left'); break; case 39: alert('right'); break; default: alert('???'); } }); 

电子邮件不工作在IE尝试e.keyCode ,如果你的目标是IE浏览器,你也可能想使用keydown()而不是keypress ()。

有关更多信息,请参阅http://unixpapa.com/js/key.html

有了jQuery,我已经这样做了:

 function checkKey(e){ switch (e.keyCode) { case 40: alert('down'); break; case 38: alert('up'); break; case 37: alert('left'); break; case 39: alert('right'); break; default: alert('???'); } } if ($.browser.mozilla) { $(document).keypress (checkKey); } else { $(document).keydown (checkKey); } 

另外,尝试这些插件,看起来像他们所做的一切为你工作:

http://www.openjs.com/scripts/events/keyboard_shortcuts

http://www.webappers.com/2008/07/31/bind-a-hot-key-combination-with-jquery-hotkeys/

你有一个string中的文档。 更改:

 $('document').keypress(function(e){ 

 $(document).keypress(function(e){ 

当然这是一个封闭的问题,我想补充一些你的讨论

在Mozilla中,我观察到这个代码有一个奇怪的行为

 $(document).keydown(function(){ //my code }); 

代码被触发两次。 当debugging时,我发现实际上有两个事件被触发:'keypress'和'keydown'。 我禁用了一个事件,代码显示了我预期的行为。

 $(document).unbind('keypress'); $(document).keydown(function(){ //my code }); 

这适用于所有浏览器,也不需要检查浏览器特定的(如果($。browser.mozilla){})。

希望这可能对某人有用

你的原始代码有$('document')…当它有$(文档)没有引号。