Javascript 热键组合don';如果做得快,就不能工作

Javascript 热键组合don';如果做得快,就不能工作,javascript,events,input,keyboard,hotkeys,Javascript,Events,Input,Keyboard,Hotkeys,我正在尝试为web应用程序创建热键,例如Ctrl+z执行撤消功能 似乎当我快速按下按键时(因为我已经习惯了经常使用桌面应用程序),它不会注册。单按键注册,但由于某种原因,它错过了组合 据我所知,你必须通过按键事件跟踪哪些按钮被按下,这就是我下面所做的 请尝试下面的代码。点击Z输出Z。按CTRL键,然后按Z键慢慢输出CTRL+Z。按CTRL键然后按Z键可快速输出Z。当我在windows记事本中以相同的速度执行操作时,它几乎每次都能完美地工作 使用e.ctrlKey检查ctrl是否为向下键而不是变

我正在尝试为web应用程序创建热键,例如Ctrl+z执行撤消功能

似乎当我快速按下按键时(因为我已经习惯了经常使用桌面应用程序),它不会注册。单按键注册,但由于某种原因,它错过了组合

据我所知,你必须通过按键事件跟踪哪些按钮被按下,这就是我下面所做的

请尝试下面的代码。点击Z输出
Z
。按CTRL键,然后按Z键慢慢输出
CTRL+Z
。按CTRL键然后按Z键可快速输出
Z
。当我在windows记事本中以相同的速度执行操作时,它几乎每次都能完美地工作


使用e.ctrlKey检查ctrl是否为向下键而不是变量,只需在keydown上检查热键组合,在KEYUP上不执行任何操作

var ctrlPressed=false, altPressed=false;

window.addEventListener("keydown", function (e) {

    hotkey = e;
    if (e.keyCode == 17) ctrlPressed = true;
    if (e.keyCode == 18) altPressed = true;
    e.preventDefault();
});

window.addEventListener("keyup", function (e) {
    hotkey = window.event;

    if (e.keyCode == 17) ctrlPressed = false;
    if (e.keyCode == 18) altPressed = false;

        if (e.keyCode == 90){
          if (altPressed && ctrlPressed && e.keyCode == 90) 
            addText('ALT + CTRL + Z');
          else if (ctrlPressed && e.keyCode == 90) 
            addText('CTRL + Z');
            else 
              addText('Z');
    }
});

//meaningless, just adds text to doc so you can see it
function addText(text) {
  var theDiv = document.getElementById("output");
  theDiv.appendChild(document.createElement("br"));
  var content = document.createTextNode(text);
  theDiv.appendChild(content);
}
function KeyPress(e) {
      var evtobj = window.event? event : e
      if (evtobj.keyCode == 90 && evtobj.ctrlKey) addText("CTRL + Z");
  else if (evtobj.keyCode == 90) addText("Z");
}

document.onkeydown = KeyPress;