2013-05-19 126 views
0

我试图让Alt键设置快捷键为Shift+Alt+ACtrl+Alt+A但是当`ShiftCtrl键被按下我不能确定Alt键是否被按下与否 。下面的代码使问题更加清晰。为什么我无法按Alt键?

el.onkeydown=function(e){ 
    //alert(e.keyCode); 

    if(e.shiftKey==true){ 
    document.body.appendChild(document.createTextNode("shiftkey")); 
    document.body.appendChild(document.createElement("br")); 
    } 
    else if(e.ctrlKey==true){ 
    document.body.appendChild(document.createTextNode("ctrlkey")); 
    document.body.appendChild(document.createElement("br")); 
    } 
    else if(e.altKey==true){ 
    document.body.appendChild(document.createTextNode("altkey")); 
    document.body.appendChild(document.createElement("br")); 
    } 
    }; 

当我尝试按一个键AltShiftCtrl键后e.altKey没有得到真正的价值,我得到的结果作为

shiftkey 
    shiftkey 
    shiftkey 
    shiftkey 
    shiftkey 
    shiftkey... 

或为Ctrl

ctrlkey 
    ctrlkey 
    ctrlkey 
    ctrlkey 
    ctrlkey 
    ctrlkey 
    ctrlkey... 

回答

4

设计缺陷。您正在检查是否按下了shiftKey。如果不是,那么你检查其他人。让我们一步一步思考。

您先按下shift键。事件发生,你的第一个条件得到满足。现在,当您按下alt键时,您的​​事件再次被调用,而这一次,由于您同时按住了shiftalt,因此会满足第一个和第三个条件。 但是,程序从未达到第三个条件,因为它在else子句中。这意味着只有你的第一个条件的代码被评估,而其余的条件会被跳过,因为第一个条件是正确的。

更改您的设计以单独检查所有钥匙,而不是每个钥匙的else条款。

您的代码应该是这样的:

el.onkeydown=function(e){ 
//alert(e.keyCode); 

if(e.shiftKey==true){ 
document.body.appendChild(document.createTextNode("shiftkey")); 
document.body.appendChild(document.createElement("br")); 
} 
if(e.ctrlKey==true){ 
document.body.appendChild(document.createTextNode("ctrlkey")); 
document.body.appendChild(document.createElement("br")); 
} 
if(e.altKey==true){ 
document.body.appendChild(document.createTextNode("altkey")); 
document.body.appendChild(document.createElement("br")); 
} 
}; 

觉得这个例子,让您更清楚的缺陷:

if(true){ 
    console.log('First'); 
} 
else if(true){ 
    console.log('Second'); 
} 

你可以看到,没关系,第二条件是否为真或者不是,只要第一个是。

在你的情况下,尽管使用逻辑运算符&&会更有意义,因为只有在按住所有三个键来创建快捷方式时你才想做点什么。这会让你的代码如下:

if(e.shiftKey && e.altKey && e.keyCode === 65){ 
    console.log('Shortcut active'); 
} 
相关问题