Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按键时检测Alt Gr(Alt图形)修改器_Javascript_Google Chrome_Keyboard - Fatal编程技术网

Javascript 按键时检测Alt Gr(Alt图形)修改器

Javascript 按键时检测Alt Gr(Alt图形)修改器,javascript,google-chrome,keyboard,Javascript,Google Chrome,Keyboard,在javascript事件对象中,有一些布尔值用于检查是否按下了修改器键: ctrlKey:按CTRL键 altKey:ALT键 altLeft:按altLeft键。只为IE altGraphKey:ALTGR键。仅适用于Chrome/Safari 但是,也存在一些问题: 按下ALTGR修改器时,IE和Chrome将ctrlKey设置为true,并将altKey设置为true 当您按下ALTGR修改器时,Firefox会将ctrlKey设置为false,将altKey设置为true,因为只

在javascript
事件
对象中,有一些布尔值用于检查是否按下了修改器键:

  • ctrlKey
    :按CTRL键
  • altKey
    :ALT键
  • altLeft
    :按altLeft键。只为IE
  • altGraphKey
    :ALTGR键。仅适用于Chrome/Safari
但是,也存在一些问题:

  • 按下ALTGR修改器时,IE和Chrome将
    ctrlKey
    设置为
    true
    ,并将
    altKey
    设置为
    true
  • 当您按下ALTGR修改器时,Firefox会将
    ctrlKey
    设置为
    false
    ,将
    altKey
    设置为
    true
    ,因为只按下了ALT
  • Chrome具有
    altGraphKey
    属性,但它始终是
    未定义的
问题:如何区分ALT+CTRL键和ALTGR键?特别是在Chrome中。

我想ALTGR键和CTRL+ALT键组合是同一件事,在Javascript中没有任何区别。 按ALTGR+e和CTRL+ALT+e都会在我的键盘/语言设置中生成€(欧元)符号。
有网页在线检查钥匙代码。希望这能有所帮助。

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

  • Webkit(Chrome)-ctrlKey:true,altKey:true
  • IE 8-ctrlKey:错误,altKey:正确
  • IE 10-ctrlKey:正确,altKey:正确
  • Mozilla(Firefox)-ctrlKey:true,altKey:true
也就是说,它们目前都是一致的(除了IE8,IE8仍然是一致的)

在现代浏览器中,下面的代码段应该捕获Alt Gr,而不是Alt或Ctrl。但是,您需要IE8的特殊情况:

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

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


请参阅:

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

window.onkeydown=函数(e){
如果(e.key=='AltGraph'){
控制台日志(e.key);
}

};是的,这是谷歌Chrome的一个bug,在金丝雀中可以正常工作,在Opera和Firefox中也可以。检查:当前浏览器行为(2013年9月)不同。请参阅下面的答案。@zuluk感谢您的通知。你能确认它在其他浏览器中是否有效吗?@zuluk,这很有趣。我想知道这些对你是否有用?这个答案在Windows10下的Chrome67上,无论是物理键盘还是屏幕键盘都能完美地工作。它还区分了AltGr和Ctrl+Alt,所以它是我首选的Chrome解决方案。请参阅:Firefox和Edge仍然不起作用。按CTRL+ALT+S与按ALTGR+S不同。我使用的是US Int键盘布局,我刚刚遇到一个问题,我想用visual studio代码键入一个德语字符(基于电子)。我看到的不是一个ß字符,而是“运行任务”菜单(快捷键CTRL+ALT+S)向我扑来。在我看来,这是一个错误。当你在德国键盘上按AltGr+Q时,同样的事情也会发生。它应该发出@字符,但会通知CTRL+ALT+QJavaScript键盘快捷方式处理程序。有趣的是,我只能在Windows上复制它——在Linux中,@字符正确地发出。我也认为这是一个bug,但是在Windows上,Edge、Firefox和Chrome的行为是一致的?我很困惑。。。