在Chrome中检测Alt键

时间:2017-12-12 20:15:44

标签: javascript google-chrome keyboard-events

在我的应用程序中,我需要处理Alt键按下/释放以切换有关工具提示的其他信息。但是,第一次按下Alt时,文档会失去键盘焦点,因为它会进入Chrome的菜单。如果我单击文档的任何部分,它将再次起作用(一次)。

我可以通过调用preventDefault来避免这种情况,但这也会禁用Alt + Left / Right等键盘快捷键,这是不可取的。

我也可以处理mousemove并检查altKey标志,但是当鼠标移动时只会更新内容时看起来很尴尬。

在我的情况下,有没有办法可靠地检测当前的Alt键状态?我真的不想换成不同的钥匙。

更新:我认为最好的解决方案是仅在工具提示有效时才调用preventDefault

  document.addEventListener("keydown", (e) => {
    if (this.curComponent) e.preventDefault();
    if (e.which === 18) {
      this.outer.classList.add("AltKey");
    }
  });
  document.addEventListener("keyup", (e) => {
    if (this.curComponent) e.preventDefault();
    if (e.which === 18) {
      this.outer.classList.remove("AltKey");
    }
  });

2 个答案:

答案 0 :(得分:1)

我有同样的问题,我解决了这个answer

document.addEventListener("keyup", (e) => {
    if (e.key === "Alt") {
        return true; // Instead of e.preventDefault();
    });

return true恢复 Alt + / 镀铬键盘快捷键的正常行为。

答案 1 :(得分:0)

<强> jQuery的:

$(document).keyup(function(e){
    if(e.which == 17){
      alert("Alt key press");
    }
});

<强>的JavaScript

document.keyup = function(e){
  if(e.which == 17){
    alert("Alt key press");
  }
}