我正在使用以下代码来跟踪关键事件
oEvent=window.event || oEvent;
iKeyCode=oEvent.keyCode || oEvent.which;alert(iKeyCode);
它在firefox中提供警报但在IE和Chrome中没有。它给了我所有其他的keyborad字符,但不是esc键和箭头键。
如何使用javascript检测chrome和IE中的esc键和箭头键?
答案 0 :(得分: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();
};
答案 1 :(得分:13)
我刚遇到同样的问题。 Chrome处理keypress
和keydown
/ keyup
事件至少存在一个差异。 Chrome中的keypress
事件不会针对箭头键触发,而对于keydown
和keyup
则触发事件。
答案 2 :(得分:7)
问题:当您执行shift-7(&符号)时,webkit会向按键发送键码38(向上箭头)。
摘要:&并且两者都相等38.%并且两者都相等37.'和右两者相等39.(并且两者都等于40.对于firefox和opera,37/38/39/40不会发送给&,%, ',(。他们只发送上,下,左,右。但是webkit,即发送37/38/39/40两个箭头键和&,%,',(注意上/下/向左/向右,webkit将charCode设置为0,但不是为&,%,',(。
解决方案:因此,如果您通过键码处理这些事件,则需要在Shift键关闭时忽略或检查charCode是否为0
答案 3 :(得分:3)
使用jQuery并使用以下内容:
$(document).keydown(function(e){
if (e.keyCode == 37) {
alert( "left pressed" );
return false;
}
});
字符代码:
37:离开
38:向上
39:对:
40:向下
答案 4 :(得分:2)
尝试使用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;
}
});
});
答案 5 :(得分:0)
这是一个简洁的表述:
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
答案 6 :(得分:0)
这在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