通过javascript/jQuery检测IE中的箭头键按下
我正在尝试设置一个可以通过箭头键导航的菜单。我在Firefox中有一个工作fin 试图让它在IE8中工作,经过一番努力后,发现这是因为IE8不会在箭头上注册按键。要测试:通过javascript/jQuery检测IE中的箭头键按下,javascript,jquery,internet-explorer-8,arrow-keys,Javascript,Jquery,Internet Explorer 8,Arrow Keys,我正在尝试设置一个可以通过箭头键导航的菜单。我在Firefox中有一个工作fin 试图让它在IE8中工作,经过一番努力后,发现这是因为IE8不会在箭头上注册按键。要测试: $(document).keypress(function (eh){ alert(eh.keyCode); }; 在Firefox中,按任意箭头键都会触发37、38、39或40的警报 在IE8中,什么都没有。标准QWERTY键盘上的任何其他键都可以注册,但箭头键不能注册 这是我的Javascript的问题吗?浏览
$(document).keypress(function (eh){
alert(eh.keyCode);
};
在Firefox中,按任意箭头键都会触发37、38、39或40的警报
在IE8中,什么都没有。标准QWERTY键盘上的任何其他键都可以注册,但箭头键不能注册
这是我的Javascript的问题吗?浏览器设置?Windows设置?使用“按键”事件尝试以下操作:
$(document).keydown(function (e) {
if(!e) {
e = window.event;
}
switch(e.keyCode) {
case 37:
goLeft();
break;
case 39:
goRight();
break;
}
});
因为我有时不希望某些关键点的事件冒泡,所以我使用以下方法: 根据需要自定义代码/键
/* 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);
});
摘自(导言文本的最后一段):
请注意,keydown
和keydup
提供一个代码,指示按下了哪个键,而keypress
指示输入了哪个字符。例如,keydown
和keydup
将小写字母“a”报告为65,而keypress
将小写字母“a”报告为97。所有事件都将大写字母“A”报告为97。由于这种区别,在捕捉特殊的击键(如箭头键)时,.keydown()
或.keydup()
是更好的选择
它甚至从字面上提到了箭头键;)因此,您确实需要挂接keydown
或keydup
事件。这是一个带有键的,只需复制“n”粘贴“n”运行它即可。不需要,您不需要对事件执行浏览器兼容检查,这适用于从IE6到Firefox的所有浏览器
<!doctype html>
<html lang="en">
<head>
<title>SO question 2217553</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$(document).keydown(function(event) {
switch (event.keyCode) {
case 37: alert('left'); break;
case 38: alert('up'); break;
case 39: alert('right'); break;
case 40: alert('down'); break;
}
});
</script>
</head>
<body>
<p>Press one of the arrow keys.</p>
</body>
</html>
所以问题2217553
$(文档).keydown(函数(事件){
开关(event.keyCode){
案例37:警报(“左”);中断;
案例38:警报(“向上”);中断;
案例39:警报(“右”);中断;
案例40:警报(“停机”);中断;
}
});
按其中一个箭头键。
jQuery是否需要检查窗口事件?我知道它消除了这样做的必要性。请不要忘记测试用户是否也按了Alt键。当您使用和进行导航时,这是非常糟糕的行为,同时阻止使用和来回浏览的默认行为。@Marcel alt arrow navigation做什么?我从未使用过它,在我使用的浏览器中它似乎也没有任何作用。至少在Firefox中,Chrome和IE(只是一个快速测试)与按下后退按钮相同,就像按下前进按钮一样(我经常使用这些热键)。+1为您提供一个完整的答案-1.因为我没有RTFMing;o) 对于将来遇到此问题的人,请注意,您应该使用$(文档)
的按键事件,而不是$(窗口)
(这是我遇到的问题)。