通过javascript / jQuery检测IE中的箭头按键

我正在尝试设置一个可以通过箭头键导航的菜单。 我在Firefox中有这个工作片。

试图让它在IE8中运行并经过一番努力,发现这是因为IE8不会在箭头上注册一个按键。 去测试:

$(document).keypress(function (eh){ alert(eh.keyCode); }; 

在Firefox中,按任意箭头键将触发37,38,39或40的警报。

在IE8中,什么都没有。 标准QWERTY键盘上的任何其他键都会注册,但不会注册箭头键。

这是我的Javascript的问题吗? 浏览器设置? Windows设置?

从jQuery keypress文档 (介绍性文本的最后一段):

请注意, keydownkeyup提供一个代码,指示按下哪个键,而keypress指示输入了哪个字符。 例如,小写“a”将通过keydownkeyup报告为65,但是按keydown按97报告。 所有事件都将大写的“A”报告为97。 由于这种区别,当捕获箭头键, .keydown().keyup()等特殊击键时,这是一个更好的选择。

它甚至提到了箭头键;)因此,你真的需要挂钩keydownkeyup事件。 这是一个带有keydown的SSCCE ,只是copy’n’paste’n’run它。 不,您不需要对event进行浏览器兼容检查,这适用于从IE6到Firefox的所有浏览器。

    SO question 2217553     

Press one of the arrow keys.

试试这个:

 $(document).keydown(function (e) { if(!e) { e = window.event; } switch(e.keyCode) { case 37: goLeft(); break; case 39: goRight(); break; } }); 

使用’keydown’事件

因为我有时不希望事件为某些键冒泡,所以我会使用以下内容:根据需要自定义代码/键。

 /* handle special key press */ function checkCptKey(e) { var shouldBubble = true; switch (e.keyCode) { // user pressed the Tab case 9: { $(".someSelect").toggleClass("classSelectVisible"); shouldBubble = false; break; }; // user pressed the Enter case 13: { $(".someSelect").toggleClass("classSelectVisible"); break; }; // user pressed the ESC case 27: { $(".someSelect").toggleClass("classSelectVisible"); break; }; }; /* this propogates the jQuery event if true */ return shouldBubble; }; /* user pressed special keys while in Selector */ $(".mySelect").keydown(function(e) { return checkCptKey(e); });