onkeydown和onkeyup事件在Internet Explorer 8上不起作用

onkeydown and onkeyup events don't work on Internet Explorer 8

本文关键字:Explorer 不起作用 Internet onkeyup 事件 onkeydown      更新时间:2023-09-26

我的代码在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];
};

你需要绑定到文档,而不是窗口。

window.onkeyup = function(event) {
window.onkeydown = function(event) {

必须是

document.onkeyup = function(event) {
document.onkeydown = function(event) {

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];
};

必须使用规范化的键代码。这样的:

var keyCode = event.which || event.keyCode;

我尝试了不同的解决方案,但这些仍然不能在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
}