据我所知,你无法做你想做的事。唯一可以同时按下的键是ctrl、shift和alt:
$(document).keydown(function(e){
var ctrl = e.ctrlKey,
shift = e.shiftKey,
alt = e.altKey,
altGr = e.altGraphKey,
code = e.keycode || e.which;
if(code==='65' && ctrl){
//Ctrl+A
}
if(code==='65' && shift){
//Shift+A
}
if(code==='65' && alt){
//Alt+A
}
if(code==='65' && altGr){
//AltGr+A
}
});
但是,我不知道这个示例是否适用于所有主流浏览器(适用于 Chrome、Firefox、Safari,也许还有 Opera 和 IE)。
另一种方法是按照@MrOBrian 所说的,将按下的键保存在数组中:
var keys = [];
$(document).keydown(function(e){
var key = e.keyCode || e.which;
if(keys.indexOf(key)===-1)
keys.push(key);
if(keys[0]===65 && keys[0]===66){
//A and B pressed, respectively
}
if(keys.indexOf(67)!==-1 && keys.indexOf(68)!==-1){
//C and D pressed, the order doesn't matter
}
});
$(document).keyup(function(){
keys = [];
});
这样,每当您按下一个键时,它将被存储在keys
数组中(除非它已经被存储),然后程序将检查被按下的键,最后,当用户“鼠标向上”时,数组将被重置。
注意:假设按下的键分别是A和B。如果要检查它们是否按此顺序按下,则必须使用此条件:
if(keys[0]===65 && keys[0]===66){
//A and B pressed, respectively
}
但是,如果您只想检查它们是否被按下并且顺序无关紧要,您只需检查它们是否在keys
数组中,条件如下:
if(keys.indexOf(65)!==-1 && keys.indexOf(66)!==-1){
//A and B pressed, the order doesn't matter
}