按键时检测Alt Gr(Alt Graph)修改器

Nit*_*itz 15 javascript keyboard google-chrome

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

  • ctrlKey:CTRL关键.
  • altKey:ALT关键.
  • altLeft:ALT左键.仅适用于IE.
  • altGraphKey:ALTGR关键.仅适用于Chrome/Safari.

但是,有一些问题:

  • IE和Chrome设置ctrlKey,以truealtKeytrue当你按下ALTGR修改.
  • Firefox的设置ctrlKeyfalsealtKeytrue当你按下ALTGR修改,因为只有ALT已被按下.
  • Chrome altGraphKey有财产,但总是如此undefined.

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

Jas*_*son 11

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,它仍然一直不一致).

以下代码段应该在现代浏览器中捕获Alt Gr- 但不能AltCtrl- .但是,您将需要IE8的特殊情况:

if (event.ctrlKey && event.altKey) {
    // Appears to be Alt Gr
}
Run Code Online (Sandbox Code Playgroud)

  • 按 CTRL+ALT+S 与按 ALTGR+S *不*相同。我正在使用 US-Int 键盘布局,我刚刚遇到一个问题,我想使用 Visual Studio 代码(基于 Electron)键入德语 ß 字符。我看到的不是 ß 字符,而是“运行任务”菜单(快捷键 CTRL+ALT+S)。在我看来这是一个错误。 (3认同)

Fra*_*Tan 5

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

window.onkeydown = function (e) {
  if (e.key === 'AltGraph') {
    console.log(e.key);
  }
};
Run Code Online (Sandbox Code Playgroud)