我从用户 B1KMusic 中找到了这个解决方案:如何使用 JavaScript 检测是否同时按下多个键?
编码:
map={}//I know most use an array, but the use of string indexes in arrays is questionable
onkeydown=onkeyup=function(e){
e=e||event//to deal with IE
map[e.keyCode]=e.type=='keydown'?true:false
/*insert conditional here*/
}
if(map[17]&&map[16]&&map[65]){//CTRL+SHIFT+A
alert('Control Shift A')
}else if(map[17]&&map[16]&&map[66]){//CTRL+SHIFT+B
alert('Control Shift B')
}else if(map[17]&&map[16]&&map[67]){//CTRL+SHIFT+C
alert('Control Shift C')
}
这可行,但我有一个问题:在按CTRL+ SHIFT+后收到警报后,B我按任意键并再次收到警报。
B1KMusic 找到了这个解决方法:
if(map[17]&&map[16]&&map[65]){//CTRL+SHIFT+A
alert('Oh noes, a bug!')
}
//When you Press any key after executing this, it will alert again, even though you
//are clearly NOT pressing CTRL+SHIFT+A
//The fix would look like this:
if(map[17]&&map[16]&&map[65]){//CTRL+SHIFT+A
alert('Take that, bug!')
map={}
}
//The bug no longer happens since the map object is cleared
我试过这个,问题仍然存在。