如何在Chrome和IE中跟踪箭头键?

dev*_*per 14 javascript keyboard events

我使用foloowing代码来跟踪关键事件

oEvent=window.event || oEvent;
    iKeyCode=oEvent.keyCode || oEvent.which;alert(iKeyCode);
Run Code Online (Sandbox Code Playgroud)

它在firefox中给我提醒但在IE和Chrome中没有.它给了我所有其他keyborad字符,但不是esc键和箭头键.

如何使用javascript检测chrome和IE中的esc键和箭头键?

Gau*_*rav 20

你真的不需要JQuery,虽然它确实使你的代码更短.

您将不得不使用keyDown事件,keyPress将无法在旧版本的IE中用于箭头键.

这里有一个完整的教程供您使用,请参阅靠近页面底部的箭头键示例:http: //www.cryer.co.uk/resources/javascript/script20_respond_to_keypress.htm

这里是我使用的一些代码,因为我必须处理带缓冲的重复按键,所以有点简化:

document.onkeydown = function(event) {
     if (!event)
          event = window.event;
     var code = event.keyCode;
     if (event.charCode && code == 0)
          code = event.charCode;
     switch(code) {
          case 37:
              // Key left.
              break;
          case 38:
              // Key up.
              break;
          case 39:
              // Key right.
              break;
          case 40:
              // Key down.
              break;
     }
     event.preventDefault();
};
Run Code Online (Sandbox Code Playgroud)

  • 这里没有使用Chrome获取箭头键 (2认同)

Pio*_*iak 13

我刚遇到同样的问题.Chrome处理keypresskeydown/ keyup事件至少有一个区别.keypress事件在Chrome不解雇箭头键,而对于keydownkeyup它.


Ove*_*289 7

问题:当你执行shift-7(&符号)时,webkit会向keypress发送一个键码38(向上箭头).

摘要:&和向上两者相等38.%并且两者都等于37.'并且右边都等于39.(对于firefox和opera而言,两者都等于40.,37/38/39/40不会发送给&, %,',(.他们只发送上,下,左,右.但是webkit,即发送37/38/39/40两个箭头键和&,%,',(注意上/下)/left/right,webkit将charCode设置为0,但不设置为&,%,',(.

解决方案:因此,如果您通过键码处理这些事件,则需要在shift键关闭时忽略或检查charCode是否为0


Mat*_*hes 3

使用 jQuery 并使用类似这样的东西:

$(document).keydown(function(e){
    if (e.keyCode == 37) { 
        alert( "left pressed" );
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

字符代码:

37:左

38:向上

39:对

40:向下