即时通讯使用foloowing代码追踪关键事件我如何跟踪Chrome和IE中的箭头键?
oEvent=window.event || oEvent;
iKeyCode=oEvent.keyCode || oEvent.which;alert(iKeyCode);
在Firefox,而不是在IE和Chrome它给我警报。它给我所有其他keyborad字符,但不是esc键和方向键。
我该如何检测铬和IE浏览器中的Esc键和箭头键使用JavaScript?
即时通讯使用foloowing代码追踪关键事件我如何跟踪Chrome和IE中的箭头键?
oEvent=window.event || oEvent;
iKeyCode=oEvent.keyCode || oEvent.which;alert(iKeyCode);
在Firefox,而不是在IE和Chrome它给我警报。它给我所有其他keyborad字符,但不是esc键和方向键。
我该如何检测铬和IE浏览器中的Esc键和箭头键使用JavaScript?
使用jQuery和使用是这样的:
$(document).keydown(function(e){
if (e.keyCode == 37) {
alert("left pressed");
return false;
}
});
字符代码:
37:左
38:最高
39:右
40:向下
尝试使用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;
}
});
});
你并不真的需要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();
};
不适用于Chrome这里的箭头键 – herophuong 2012-06-18 06:18:50
在Chrome上适用于我http://jsfiddle.net/Ueqms/ – Gaurav 2012-06-19 03:15:15
我需要使用小写onkeydown才能在Opera中工作。即'document.onkeydown = function(event){...}' – 2014-08-21 04:00:38
我刚刚面临同样的问题。 Chrome处理keypress
和/keyup
事件至少有一处不同。 Chrome中的keypress
事件未针对箭头键触发,而和keyup
则是。
问题:当你做shift-7(&符号)时,webkit发送一个键码38(向上箭头)到按键。
摘要: &和向上都等于38%和左都等于37'和右都等于39(上下两个Firefox和歌剧等于40,则37/38/39/40 AREN '(''''),(。他们只发送那些向上,向下,向左,向右,但webkit和即发送37/38/39/40箭头键和&,%,',(。请注意,对于上/下/左/右,webkit将charCode设置为0,但对于&,%,',(。
解决方案:因此,如果您的键码处理这些事件,你需要或者忽略当变速键关闭或检查charCode为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
这对我在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
这是因为您将事件附加到浏览器之间的DOM节点时存在差异。我不确定不同浏览器的确切代码是不是tho。 – bigblind 2011-06-03 12:08:03