这是我的代码:
$(document).keydown(function(e){
switch(e.keyCode){
case 39:
function1();
break;
case 32:
function2();
break;
case 39:
case 32:
function3();
break;
}
});
除了案例39:案例32:它工作正常 它仅适用于同时满足案例39和32的情况。 如果首先满足情况39然后满足情况32而仍然满足情况39,则仅运行情况32。 我想要做的是在案例39:案例32:遇到但不仅在同时满足两者时运行function3()。有解决方法吗?
答案 0 :(得分:2)
该开关将简单地匹配它首先遇到的任何案例陈述。
在您的代码中,function3
永远无法执行,因为当e.keyCode
为39时,它与第一个语句匹配,而当它为32时,它与第二个匹配。它永远不会到达第三部分。
如果您希望在任一条件为真时运行function3
:
switch(e.keyCode){
case 39:
function1();
function3();
break;
case 32:
function2();
function3();
break;
}
如果您希望function3
始终运行,请稍后将其放置:
switch(e.keyCode){
case 39:
function1();
break;
case 32:
function2();
break;
}
function3();
此外,e.keyCode
同时可能是两个不同数字的想法并没有任何意义。它只是一个数字变量。它一次只能容纳一个数字。
在评论中,你说你想要在一个接一个地按下两个不同的键时运行代码。好吧,那就是这个事件的两次不同的发射。你必须跟踪一些州。
var key39Pressed = false;
var key32Pressed = false;
$(document).keydown(function(e){
switch(e.keyCode){
case 39:
if (key32Pressed)
function3();
else
function1();
key39Pressed = true;
key32Pressed = false;
break;
case 32:
if (key39Pressed)
function3();
else
function2();
key32Pressed = true;
key39Pressed = false;
break;
default:
key32Pressed = false;
key39Pressed = false;
}
}
答案 1 :(得分:0)
我使用if语句进行一些额外的状态跟踪。
var pressedKeys = {};
$(document).keydown(function(e) {
pressedKeys[e.which] = true; //setting it up like this so I can use the "in" operator
if(39 in pressedKeys) {
if(32 in pressedKeys) {
//both 39 and 32 are pressed
function3();
} else {
//only 39 is pressed
function1();
}
} else if(32 in pressedKeys) {
//only 32 is pressed
function2();
}
});
$(document).keyup(function(e) {
delete pressedKeys[e.which];
});
答案 2 :(得分:-1)
你也可以......
var t;
switch(e.keyCode){
case 39:
function1();
t=1;
setTimeout(function(){t=0},1000);
case 32:
function2();
if(t) {
function3();}
break;
}
因此,如果您在1秒前按键,则功能3将调用