javascript onkeydown 和 onkeyup 事件在 Internet Explorer 8 上不起作用
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/16399150/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
onkeydown and onkeyup events don't work on Internet Explorer 8
提问by Penta
My code works without problems on IE9/IE10, FF, Chrome and opera but on older Internet Explorer no Keyboard input is handled.
我的代码在 IE9/IE10、FF、Chrome 和 Opera 上运行没有问题,但在较旧的 Internet Explorer 上没有处理键盘输入。
I have the following code for handling events. It should only fire when a new button is pressed.
我有以下用于处理事件的代码。它应该只在按下新按钮时触发。
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];
};
采纳答案by Arun P Johny
Try
尝试
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];
};
回答by epascarello
You need to bind to the document, not window.
您需要绑定到文档,而不是窗口。
window.onkeyup = function(event) {
window.onkeydown = function(event) {
needs to be
需要是
document.onkeyup = function(event) {
document.onkeydown = function(event) {
回答by Vitalii Petrychuk
You have to use normalized key code. Like this:
您必须使用规范化的密钥代码。像这样:
var keyCode = event.which || event.keyCode;
回答by koljanep
I tried different solutions but these still did not work correctly in IE8. What I came up with that worked is this:
我尝试了不同的解决方案,但这些在 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
}