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

发布于 2024-11-14 01:35:25 字数 268 浏览 2 评论 0原文

我使用以下代码来跟踪关键事件,

oEvent=window.event || oEvent;
    iKeyCode=oEvent.keyCode || oEvent.which;alert(iKeyCode);

它在 Firefox 中向我发出警报,但在 IE 和 chrome 中却没有。它给了我所有其他键盘字符,但没有 esc 键和箭头键。

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

Im using foloowing code to track key events

oEvent=window.event || oEvent;
    iKeyCode=oEvent.keyCode || oEvent.which;alert(iKeyCode);

its giving me alerts in firefox but not in IE and chrome. Its giving me all the other keyborad characters but not esc key and arrow keys.

How can i detect esc key and arrow keys in chrome and IE using javascript??

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

给妤﹃绝世温柔 2024-11-21 01:35:25

您实际上并不需要 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();
};

You don't really need JQuery, though it does make your code shorter.

You will have to use the keyDown event, keyPress will not work in old versions of IE for the arrow keys.

There is a full tutorial here that you can use, see the example with arrow keys close to the bottom of the page:
http://www.cryer.co.uk/resources/javascript/script20_respond_to_keypress.htm

Here's some code I used, a bit simplified since I had to handle repeated keypresses with buffering:

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();
};
谈情不如逗狗 2024-11-21 01:35:25

我刚刚遇到了同样的问题。 Chrome 在处理 keypresskeydown/keyup 事件时至少有一个区别。 Chrome 中的 keypress 事件不会因箭头键而触发,而对于 keydownkeyup 则会触发。

I've just faced same problem. There is at least one difference Chrome handles the keypress and keydown/keyup events. keypress event in Chrome is not fired for arrow keys, whereas for keydown and keyup it is.

太阳哥哥 2024-11-21 01:35:25

问题:当您执行shift-7(与符号)时,webkit 会向按键发送键码 38(向上箭头)。

摘要: &向上均等于 38.%,向左均等于 37.',向右均等于 39.( 向下均等于 40。对于 Firefox 和 Opera,37/38/39/40 不会发送给 &, %, ', (。他们只发送上、下、左、右的键。但是 webkit 和 ie 为箭头键和 & 发送 37/38/39/40, %, ', (。请注意,对于上/下/左/右,webkit 将 charCode 设置为 0,但对于 &, %, ', (。

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

problem: webkit sends a keycode 38 (up arrow) to keypress when you do shift-7 (ampersand).

summary: & and up both equal 38. % and left both equal 37. ' and right both equal 39. ( and down both equal 40. for firefox and opera, the 37/38/39/40 aren't sent for &, %, ', (. they only send those for up, down, left, right. but webkit and ie send 37/38/39/40 for both arrow keys and &, %, ', (. note that for up/down/left/right, webkit sets charCode to 0, but not for &, %, ', (.

solution: so if you handling those events by keycode, you need to either ignore when the shift key is down or check if the charCode is 0

﹏半生如梦愿梦如真 2024-11-21 01:35:25

使用 jQuery 并使用如下内容:

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

字符代码:

37:左

38:上

39:右

40:下

Use jQuery and use something like this:

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

Character codes:

37: left

38: up

39: right

40: down

最美的太阳 2024-11-21 01:35:25

演示

尝试使用 jquery 库来完成您需要的操作,然后在下面调用。在演示中,您可以单击输入框,然后开始输入。它会用密钥代码提醒您。您可以将该事件侦听器绑定到页面的任何元素。它不一定只是一个输入。

$(document).ready(function() { 
    KEY_CODES = {
      37: 'left',
      38: 'up',
      39: 'right',
      40: 'down'
    }

    KEY_STATUS = { keyDown:false };
    for (code in KEY_CODES) {
      KEY_STATUS[KEY_CODES[code]] = false;
    }

    $(window).keydown(function (e) {

      KEY_STATUS.keyDown = true;

      // perform functionality for keydown
      if (KEY_CODES[e.keyCode]) {
          e.preventDefault();
          alert('arrow');
          if(e.keyCode == 40)
          {
              // Arrow Down 
          }

          else if(e.keyCode == 39)
          {
              // Arrow Right    
          }

          else if(e.keyCode == 38)
          {
              // Arrow Up    
          }

          else if(e.keyCode == 37)
          {
              // Arrow Left    
          }

      }

    }).keyup(function (e) {
      KEY_STATUS.keyDown = false;
      if (KEY_CODES[e.keyCode]) {          
        e.preventDefault();
        KEY_STATUS[KEY_CODES[e.keyCode]] = false;
      }
    });

});

Demo

Try using the jquery library to do what you need and then call below. In the demo you can click in the input box and then start typing. It will alert you with the key code. You can bind that event listener to any element of your page. It doesn't have to just be an input.

$(document).ready(function() { 
    KEY_CODES = {
      37: 'left',
      38: 'up',
      39: 'right',
      40: 'down'
    }

    KEY_STATUS = { keyDown:false };
    for (code in KEY_CODES) {
      KEY_STATUS[KEY_CODES[code]] = false;
    }

    $(window).keydown(function (e) {

      KEY_STATUS.keyDown = true;

      // perform functionality for keydown
      if (KEY_CODES[e.keyCode]) {
          e.preventDefault();
          alert('arrow');
          if(e.keyCode == 40)
          {
              // Arrow Down 
          }

          else if(e.keyCode == 39)
          {
              // Arrow Right    
          }

          else if(e.keyCode == 38)
          {
              // Arrow Up    
          }

          else if(e.keyCode == 37)
          {
              // Arrow Left    
          }

      }

    }).keyup(function (e) {
      KEY_STATUS.keyDown = false;
      if (KEY_CODES[e.keyCode]) {          
        e.preventDefault();
        KEY_STATUS[KEY_CODES[e.keyCode]] = false;
      }
    });

});
ぶ宁プ宁ぶ 2024-11-21 01:35:25

以下是一个简洁的表述:

document.onkeydown = function(e) {
    switch (e.keyCode) {
        case 37:
            alert('left');
            break;
        case 38:
            alert('up');
            break;
        case 39:
            alert('right');
            break;
        case 40:
            alert('down');
            break;
    }
};

但是,如果您使用 JQuery,则最好使用 e.which,JQuery 会“规范化”以考虑跨浏览器差异:

$(document).keydown(function(e) {
    switch(e.which) {
        // the rest is the same

Here is a terse formulation:

document.onkeydown = function(e) {
    switch (e.keyCode) {
        case 37:
            alert('left');
            break;
        case 38:
            alert('up');
            break;
        case 39:
            alert('right');
            break;
        case 40:
            alert('down');
            break;
    }
};

However, if you are using JQuery, you are better off using e.which, which JQuery "normalizes" to account for cross-browser differences:

$(document).keydown(function(e) {
    switch(e.which) {
        // the rest is the same
飘落散花 2024-11-21 01:35:25

这在 Opera20 和 IE8 中对我有用。 (我没有 Chrome 来测试。)

var keyPressListenerFn = function(event) {
    if (!event){ event = window.event }
    var code = event.charCode && event.keyCode == 0 ? event.charCode : event.keyCode
    switch(code) {
        case 37: prev(); break // left
        case 39: next(); break // right
    }
    if (event.preventDefault){ event.preventDefault() } // opera20
    if (event.returnValue){ event.returnValue = false } // ie8
}
var addEvent = document.attachEvent ? document.attachEvent : document.addEventListener
addEvent('keydown', keyPressListenerFn)   // opera20
addEvent('onkeydown', keyPressListenerFn) // ie8

This worked for me in Opera20 and IE8. (I don't have Chrome to test with.)

var keyPressListenerFn = function(event) {
    if (!event){ event = window.event }
    var code = event.charCode && event.keyCode == 0 ? event.charCode : event.keyCode
    switch(code) {
        case 37: prev(); break // left
        case 39: next(); break // right
    }
    if (event.preventDefault){ event.preventDefault() } // opera20
    if (event.returnValue){ event.returnValue = false } // ie8
}
var addEvent = document.attachEvent ? document.attachEvent : document.addEventListener
addEvent('keydown', keyPressListenerFn)   // opera20
addEvent('onkeydown', keyPressListenerFn) // ie8
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文