2016-04-26 52 views
2

在窗口处理,我希望的AltGr键组成,它成功地做变音字符,但看在幕后事实证明,窗户的AltGr键等同于Alt键 + Ctrl +从这里可以看出[1](使用该工具来解释此页面上的键盘事件)。这只是在Windows上的行为;在Linux上AltGr是不是拆分成Alt + Ctrl这样子。的AltGr为Alt + Ctrl

我如何区分Alt键 + Ctrl键运行在Windows这样的情况下正常的AltGr操作?

[1] http://javascript.info/tutorial/keyboard-events

回答

0

modern browsers,你可以使用location property of the keyboard event以确定是否左或右ALT键(右你的情况是AltGr键)被按下。

document.getElementById("test").addEventListener("keydown", function(e) { 
 
    // For pretty output in the demo 
 
    var locations = {"1": "Left", "2": "Right"}; 
 
    var keys = {"17": "Ctrl", "18": "Alt"}; 
 

 
    // Checking e.keyCode and e.location 
 
    document.getElementById("test").value = 
 
     "Key: " + (keys[e.keyCode] || e.keyCode) + 
 
     ", Location: " + (locations[e.location] || e.location); 
 

 
    e.preventDefault(); 
 
}); 
 
document.getElementById("test").focus();
<input id="test" type="text" style="width: 100%;" value="Click here and test alt, ctrl and altgr"/>

+0

那么,它仍然不适合我的使用情况。做一个ctrlL + altL + 会给你的位置= 0。同样,做一个AltGr + 也会给你的位置= 0.我将如何区分这种情况? – pranavk

+1

ofcourse我可以检测到先前的ctrl或alt的调用,并使用位置属性来检查左或右ctrl/alt被按下 – pranavk

+0

这就是我正在建议,因为我不认为有一种便携式的方式将它们检测为修饰键。我知道有些事情只能在(旧?)IE中使用,其他方式会在Linux上产生比Windows等不同的结果......实际上,在Windows中,在大多数情况下,甚至可以使用Ctrl + Alt +和使用AltGr +的东西一样(这是因为当时键盘没有AltGr),例如我可以使用Ctrl + Alt +ß在我的德语键盘上获得'\'。 – CherryDT