【问题标题】:Detecting Alt key in Chrome在 Chrome 中检测 Alt 键
【发布时间】:2020-03-04 22:49:25
【问题描述】:

在我的应用程序中,我需要处理 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");
    }
  });

【问题讨论】:

    标签: javascript google-chrome keyboard-events


    【解决方案1】:

    我遇到了同样的问题,感谢answer

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

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

    【讨论】:

    • 对我不起作用。我在 Ubuntu 19.04 上使用 Chrome。
    【解决方案2】:

    左侧/右侧的键盘值 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。
    猜你喜欢
    • 2012-05-26
    • 2016-09-30
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 2017-10-14
    • 1970-01-01
    • 2011-01-14
    相关资源
    最近更新 更多