【问题标题】:Detect Alt Gr (Alt Graph) modifier on key press在按键上检测 Alt Gr(Alt Graph)修饰符
【发布时间】:2012-05-26 07:21:12
【问题描述】:

在 javascript Event 对象中,有一些布尔值来检查是否按下了修饰键:

  • ctrlKey: CTRL 键。
  • altKey: ALT 键。
  • altLeft: ALT 左键。仅适用于 IE。
  • altGraphKeyALTGR 键。仅适用于 Chrome/Safari。

但是,有一些问题:

  • 按 ALTGR 修饰符时,IE 和 Chrome 将 ctrlKey 设置为 truealtKey 设置为 true
  • 当您按下 ALTGR 修饰符时,Firefox 会将 ctrlKey 设置为 false 并将 altKey 设置为 true,因为仅按下了 ALT。
  • Chrome 具有altGraphKey 属性,但始终为undefined

问题:如何区分 ALT+CTRLALTGR 按键?特别是在 Chrome 中。

【问题讨论】:

  • 当前浏览器行为(2013 年 9 月)不同。请参阅下面的答案。

标签: javascript google-chrome keyboard


【解决方案1】:

webkit 浏览器中的 altGraphKey 似乎不再存在(截至 2013 年 9 月),Firefox 的行为也发生了变化。 AltGr 键的浏览器行为当前似乎是:

  • Webkit (Chrome) - ctrlKey: true, altKey: true
  • IE 8 - ctrlKey: false, altKey: true
  • IE 10 - ctrlKey: true, altKey: true
  • Mozilla (Firefox) - ctrlKey: true, altKey: true

也就是说,它们当前都是一致的(除了 IE8,它仍然始终不一致)。

下面的 sn-p 应该捕获 Alt Gr - 但不是 AltCtrl - 在现代浏览器中。但是,您将需要 IE8 的特殊情况:

if (event.ctrlKey && event.altKey) {
    // Appears to be Alt Gr
}

【讨论】:

  • 按 CTRL+ALT+S 与按 ALTGR+S不同。我正在使用 US-Int 键盘布局,但我遇到了一个问题,我想用 Visual Studio 代码(基于电子)输入德语 ß 字符。而不是 ß 字符,我得到了“运行任务”菜单(快捷键 CTRL+ALT+S)向我跳来跳去。在我看来这是一个错误。
  • 在德语键盘上按 AltGr+Q 时会发生同样的事情。它应该发出 @ 字符,但 CTRL+ALT+Q JavaScript 键盘快捷键处理程序会收到通知。有趣的是,我只能在 Windows 上重现这一点——在 Linux 中,@ 字符被正确发出。我也认为这是一个错误,但是在 Windows 上,Edge、Firefox 和 Chrome 的行为是否一致?我很困惑...
【解决方案2】:

免责声明:我没有具有此键的键盘,因此我无法测试自己,但规范说可以使用 key 属性。如果您只需要支持实现它的浏览器(在撰写本文时,只有 Safari 不支持),这可能是一个很好的解决方案。您可以检查该值是否为"AltGraph"

window.onkeydown = function (e) {
  if (e.key === 'AltGraph') {
    console.log(e.key);
  }
};

【讨论】:

  • @zuluk 感谢您的通知。您能否确认它是否适用于任何其他浏览器?
  • @zuluk 这很有趣。我想知道other values 是否适合您?
  • 这个答案与 Windows 10 下的 Chrome 67 完美配合,无论是物理键盘还是屏幕键盘。还可以区分 AltGr 和 Ctrl+Alt,因此它是我首选的 Chrome 解决方案。请参阅:github.com/Microsoft/vscode/issues/50341#issuecomment-399053187 Firefox 和 Edge 仍然无法正常工作。
【解决方案3】:

值得一提的是,在现代浏览器中可以通过检查 alt 键事件的位置来检测到这一点。

见:Is there a way to detect which side the Alt key was pressed on (right or left)?

【讨论】:

    【解决方案4】:

    我猜 ALTGR 键和 CTRL+ALT 键组合是相同的,在 Javascript 中没有任何区别. 按 ALTGR+eCTRL+ALT+e 都会产生 €我的键盘/语言设置上的(欧元)符号。 网上有一些页面可以检查键码。希望这会有所帮助。

    【讨论】:

    • 是的,这是一个 Google Chrome 错误,在 Canary 中它可以正常工作,在 Opera 和 Firefox 中也是如此。签出:jsfiddle.net/iegik/PpH76
    猜你喜欢
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2023-03-18
    • 2018-06-30
    • 2016-09-30
    相关资源
    最近更新 更多