Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过javascript/jQuery检测IE中的箭头键按下_Javascript_Jquery_Internet Explorer 8_Arrow Keys - Fatal编程技术网

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

通过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的问题吗?浏览

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

试图让它在IE8中工作,经过一番努力后,发现这是因为IE8不会在箭头上注册按键。要测试:

$(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) 对于将来遇到此问题的人,请注意,您应该使用
$(文档)
按键事件,而不是
$(窗口)
(这是我遇到的问题)。