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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

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

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

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

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

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

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

提问于
用户回答回答于

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>
用户回答回答于

试试这个:

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

扫码关注云+社区