在Chrome中检测Alt键

3
在我的应用程序中,我需要处理Alt键的按下/释放事件以切换工具提示上的附加信息。然而,第一次按下Alt键时,文档失去了键盘焦点,因为它跳到了Chrome的菜单上。如果我点击文档的任何部分,它再次起作用(一次)。
我可以通过调用preventDefault来避免这种情况,但这也会禁用键盘快捷键,如Alt +左/右箭头,这是不可取的。
我也可以处理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个回答

3

我曾经遇到过同样的问题,通过这个答案我解决了它:

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

return true会恢复Alt+Left/Right Chrome键盘快捷键的正常行为。


对我不起作用。我正在使用Ubuntu 19.04上的Chrome浏览器。 - wle8300

0

键盘值左/右侧ALT = 18

jQuery:

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

JavaScript

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

我知道如何设置事件,但它不起作用。请阅读问题。另外,17 是Ctrl键,不是Alt键。 - riv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接