onkeydown 和 onkeyup 事件在 Internet Explorer 8 上不起作用
Posted
技术标签:
【中文标题】onkeydown 和 onkeyup 事件在 Internet Explorer 8 上不起作用【英文标题】:onkeydown and onkeyup events don't work on Internet Explorer 8 【发布时间】:2013-04-30 05:34:33 【问题描述】:我的代码在 IE9/IE10、FF、Chrome 和 opera 上运行没有问题,但在较旧的 Internet Explorer 上没有处理键盘输入。
我有以下用于处理事件的代码。它应该只在按下新按钮时触发。
lastEvent = void 0;
heldKeys = ;
window.onkeydown = function(event)
if (lastEvent && lastEvent.keyCode === event.keyCode)
return;
lastEvent = event;
heldKeys[event.keyCode] = true;
switch (event.which)
case 80:
return myamp.userInput("positiv");
case 81:
return myamp.userInput("negativ");
;
window.onkeyup = function(event)
lastEvent = null;
return delete heldKeys[event.keyCode];
;
【问题讨论】:
【参考方案1】:你需要绑定到文档,而不是窗口。
window.onkeyup = function(event)
window.onkeydown = function(event)
需要
document.onkeyup = function(event)
document.onkeydown = function(event)
【讨论】:
【参考方案2】:试试
lastEvent = void 0;
heldKeys = ;
window.onkeydown = function(event)
event = event || window.event; //IE does not pass the event object
if (lastEvent && lastEvent.keyCode === event.keyCode)
return;
lastEvent = event;
heldKeys[event.keyCode] = true;
var keyCode = event.which || event.keyCode; //key property also different
switch (keyCode)
case 80:
return myamp.userInput("positiv");
case 81:
return myamp.userInput("negativ");
;
window.onkeyup = function(event)
event = event || window.event;
lastEvent = null;
return delete heldKeys[event.keyCode];
;
【讨论】:
我替换了窗口。与文件。并添加了您的更改,并且措辞很好!谢谢大家!【参考方案3】:您必须使用规范化的密钥代码。像这样:
var keyCode = event.which || event.keyCode;
【讨论】:
【参考方案4】:我尝试了不同的解决方案,但这些在 IE8 中仍然无法正常工作。我想出的是这样的:
window.onkeyup = function(e)
e = (e) ? e : window.event; // check if e is defined
var kc = (e) ? e.which : e.keyCode; // assign keyCode
key = (key === undefined) ? e.keyCode : kc; // if keyCode still undefined, reassign it
if (kc == 13)
//enter was pressed
// other code
【讨论】:
以上是关于onkeydown 和 onkeyup 事件在 Internet Explorer 8 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章
react 中 onKeyDown,onKeyUp,onKeyPress事件
OnKeyPress、onKeyDown、onKeyUp 事件在 Android 下的 Firefox/Chrome 中在键入字母时未触发
解决当Activity弹窗后,无法监听到onKeyUp()和onKeyDown()按键事件