如何在 Chrome 和 IE 中跟踪箭头键?
我使用以下代码来跟踪关键事件,
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
您实际上并不需要 JQuery,尽管它确实使您的代码更短。
您必须使用 keyDown 事件,keyPress 在旧版本的 IE 中无法用作箭头键。
这里有一个完整的教程可供您使用,请参阅页面底部附近带有箭头键的示例:
http://www.cryer.co.uk/resources/javascript/script20_respond_to_keypress.htm
这是我使用的一些代码有点简化,因为我必须使用缓冲处理重复的按键:
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:
我刚刚遇到了同样的问题。 Chrome 在处理
keypress
和keydown
/keyup
事件时至少有一个区别。 Chrome 中的keypress
事件不会因箭头键而触发,而对于keydown
和keyup
则会触发。I've just faced same problem. There is at least one difference Chrome handles the
keypress
andkeydown
/keyup
events.keypress
event in Chrome is not fired for arrow keys, whereas forkeydown
andkeyup
it is.问题:当您执行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
使用 jQuery 并使用如下内容:
字符代码:
37:左
38:上
39:右
40:下
Use jQuery and use something like this:
Character codes:
37: left
38: up
39: right
40: down
演示
尝试使用 jquery 库来完成您需要的操作,然后在下面调用。在演示中,您可以单击输入框,然后开始输入。它会用密钥代码提醒您。您可以将该事件侦听器绑定到页面的任何元素。它不一定只是一个输入。
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.
以下是一个简洁的表述:
但是,如果您使用 JQuery,则最好使用
e.which
,JQuery 会“规范化”以考虑跨浏览器差异:Here is a terse formulation:
However, if you are using JQuery, you are better off using
e.which
, which JQuery "normalizes" to account for cross-browser differences:这在 Opera20 和 IE8 中对我有用。 (我没有 Chrome 来测试。)
This worked for me in Opera20 and IE8. (I don't have Chrome to test with.)