【问题标题】:onkeydown and onkeyup events don't work on Internet Explorer 8onkeydown 和 onkeyup 事件在 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];
};

【问题讨论】:

    标签: javascript internet-explorer-8 onkeydown onkeyup


    【解决方案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
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-01-18
          • 2012-06-07
          • 1970-01-01
          • 2013-12-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多