使用JavaScript检测AltGr密钥

时间:2015-01-26 20:34:20

标签: javascript jquery keyboard

如何澄清 ALT + CTRL ALTGR 按键?

我在这里找到了这个代码作为可能的解决方案,但它不起作用:

if (event.ctrlKey && event.altKey) {

}

此代码适用于 alt + ctr 以及 altGr

我的情况是这样的:对于 alt + ctrl + e (例如e,这是无关紧要的)我想要一件事对于 altGr + e 另一个,我该怎么做?

如果有人有任何想法,请告诉我。

3 个答案:

答案 0 :(得分:2)

您可以通过location对象中event属性的值来检测按下了哪个键(从右键或左键)。如果location属性的值为1(e.location=1),则按下左键。如果值为2,则按下右键。

我在这里提供了 RightAlter+RightCtrl+<any_valid_key>

的代码

检查此示例

var isRightAltKey=false;
var isRightCtrlKey=false;
var validKeys=['a','s','d','f','g']; //keep empty array if no need to check key


document.addEventListener("keydown", function(e) {
  if(e.key=="Alt"){
       // when right Alter pressed make isRightAltKey true 
       isRightAltKey= (e.location==2); 
       
  }
  else if(e.key=="Control"){
      // when right Control pressed make isRightCtrlKey true, 
      //if you need any ctrl key pressed then simply set isRightCtrlKey= true;
       isRightCtrlKey= (e.location==2); 
  }

  // checking both right key is pressed already or not?
  var isRightKeys= isRightAltKey && isRightCtrlKey;
  
  // validate other keys [optional]
  var isValidKey=((typeof validKeys === "undefined") || validKeys.length==0 || validKeys.indexOf(e.key.toLowerCase())>=0);
  
  if (isRightKeys && isValidKey){
    document.getElementById("detect_key").innerHTML = "RightAlt + RightCtrl + "+e.key; 
  }
  else
  {
    document.getElementById("detect_key").innerHTML="";
  }
}, false);

document.addEventListener("keyup", function(e) {
  if(e.key=="Alt"){
       // when right Alter released make isRightAltKey false
       isRightAltKey= false; 
       
  }
  else if(e.key=="Control"){
       // when right Control released make isRightCtrlKey false
       isRightCtrlKey= false; 
  }
}, false);
<div id="detect_key"></div>

为什么附加了keyup事件列表器?

这里我们必须在按下Ctrl和Alt键时检测键位置(在keydown事件上)。我们必须将它存储在flag变量中并使其成立。当key被释放时(在keyup事件上)必须标记为false。否则这些标志始终为真。在下一键按下它将始终为真

答案 1 :(得分:1)

您可以使用该位置来确定正在按下哪个alt。 为了支持Alt + Ctrl,我们将保存按下的Alt的最后位置。

Location = 1 // Left
Location = 2 // Right 

然后,一旦按下Alt和Ctrl,就做你的事。在这个例子中,我们只是在结果div中写入Alt侧。你可以添加&#34; e&#34;压力条件:

if (e.ctrlKey && e.altKey && e.key == "e"){

Example

<强> HTML

<div class="cont">
    Click Alt + Ctrl<br /><br />
    <div id="res"></div>
</div>

<强>的Javascript

var lastAltLocation;

document.addEventListener("keydown", function(e) {
   if (e.key == "Alt"){
     lastAltLocation = e.location;
   }
   if (e.ctrlKey && e.altKey){
       if (lastAltLocation == 1){
           document.getElementById("res").innerHTML = "Left";
       }
       if (lastAltLocation == 2){
           document.getElementById("res").innerHTML = "Right";
       }
   } 
}, false);

答案 2 :(得分:0)

严格遵守您的问题是两个必要案例的代码:

document.addEventListener ("keydown", function (zEvent) {
    if (zEvent.altKey  &&  zEvent.code === "KeyE") {
        if(zEvent.ctrlKey) {
            //Do Ctrl+Alt+E Stuff Here.
        } else {
            //Do Alt+E Stuff Here.
    }
});

现在打破这里发生的事情。 keydown允许您检测多个按键。

首先,我们检查是否按下 Alt E 键。如果是,我们继续检查 Ctrl 键是否也处于活动状态,并根据需要采取相应的操作。