为什么我无法按下alt键?

时间:2013-05-19 15:37:39

标签: javascript events browser keyboard-shortcuts

我正在尝试使用Alt键将快捷方式设置为Shift+Alt+ACtrl+Alt+A但是当按下`ShiftCtrl键时,我可以不确定是否按下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"));
    }
    };

当我尝试在AltShift键后按Ctrl键时,e.altKey未获得true值,我将结果显示为< / p>

    shiftkey
    shiftkey
    shiftkey
    shiftkey
    shiftkey
    shiftkey...

Ctrl

    ctrlkey
    ctrlkey
    ctrlkey
    ctrlkey
    ctrlkey
    ctrlkey
    ctrlkey...

1 个答案:

答案 0 :(得分:4)

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

先按下shift键。事件激发,您的第一个条件得到满足。现在,当您按下alt键时,会再次调用keydown事件,这次,由于您同时按下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');
}