我正在尝试使用Alt
键将快捷方式设置为Shift+Alt+A
或Ctrl+Alt+A
但是当按下`Shift
或Ctrl
键时,我可以不确定是否按下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"));
}
};
当我尝试在Alt
或Shift
键后按Ctrl
键时,e.altKey
未获得true值,我将结果显示为< / p>
shiftkey
shiftkey
shiftkey
shiftkey
shiftkey
shiftkey...
或Ctrl
:
ctrlkey
ctrlkey
ctrlkey
ctrlkey
ctrlkey
ctrlkey
ctrlkey...
答案 0 :(得分:4)
设计缺陷。您正在检查shiftKey
是否被按下。如果不是,那么你检查其他人。让我们一步一步地思考它。
先按下shift键。事件激发,您的第一个条件得到满足。现在,当您按下alt键时,会再次调用keydown
事件,这次,由于您同时按下shift
和alt
,因此第一个和第三个条件是满足。 然而,程序永远不会达到第三个条件,因为它在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');
}