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

DA.*_*DA. 15 javascript jquery arrow-keys internet-explorer-8

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

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

$(document).keypress(function (eh){ 
    alert(eh.keyCode);
};
Run Code Online (Sandbox Code Playgroud)

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

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

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

Bal*_*usC 38

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

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

它甚至字面上提到了箭头键;)因此,你真的需要挂钩keydownkeyup事件.下面是一个SSCCEkeydown,只是它copy'n'paste'n'run.不,您不需要对浏览器进行兼容检查event,这适用于从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>
Run Code Online (Sandbox Code Playgroud)


Ski*_*ick 7

试试这个:

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