通过javascript / jQuery检测IE中的箭头按键
我正在尝试设置一个可以通过箭头键导航的菜单。 我在Firefox中有这个工作片。
试图让它在IE8中运行并经过一番努力,发现这是因为IE8不会在箭头上注册一个按键。 去测试:
$(document).keypress(function (eh){ alert(eh.keyCode); };
在Firefox中,按任意箭头键将触发37,38,39或40的警报。
在IE8中,什么都没有。 标准QWERTY键盘上的任何其他键都会注册,但不会注册箭头键。
这是我的Javascript的问题吗? 浏览器设置? Windows设置?
从jQuery keypress
文档 (介绍性文本的最后一段):
请注意,
keydown
和keyup
提供一个代码,指示按下哪个键,而keypress
指示输入了哪个字符。 例如,小写“a”将通过keydown
和keyup
报告为65,但是按keydown
按97报告。 所有事件都将大写的“A”报告为97。 由于这种区别,当捕获箭头键,.keydown()
或.keyup()
等特殊击键时,这是一个更好的选择。
它甚至提到了箭头键;)因此,你真的需要挂钩keydown
或keyup
事件。 这是一个带有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); });