Javascript切换案例1、案例2和案例1和案例2
这是我的代码:Javascript切换案例1、案例2和案例1和案例2,javascript,jquery,Javascript,Jquery,这是我的代码: $(document).keydown(function(e){ switch(e.keyCode){ case 39: function1(); break; case 32: function2(); break; case 39: case 32: function
$(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,然后在仍然满足案例39的情况下满足案例32,则仅运行案例32。
我要做的是在满足case 39:case 32:时运行function3(),而不仅仅是在同时满足这两个条件时。有解决方法吗?该开关只需匹配它首先遇到的任何case语句即可 在您的代码中,
function3
永远无法执行,因为当e.keyCode
为39时,它匹配第一条语句,当它为32时,它匹配第二条语句。它永远不会到达第三部分
如果要在任一条件为真时运行功能3
:
switch(e.keyCode){
case 39:
function1();
function3();
break;
case 32:
function2();
function3();
break;
}
如果要始终运行功能3
,只需将其放在后面:
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;
}
}
你也可以
var t;
switch(e.keyCode){
case 39:
function1();
t=1;
setTimeout(function(){t=0},1000);
case 32:
function2();
if(t) {
function3();}
break;
}
所以,如果您在1秒前按键,function3将调用,我将使用一个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];
});
一个整数怎么可能同时是两个不同的值?可能是指当两个键相继按下时?但它应该是有效的,我想仅供参考-使用
e.which
,而不是e.keyCode
-jQuery将跨浏览器的键代码规范化为which
属性这正是我试图做的,在两个键相继按下时运行该功能。但它只在我同时按下两个键时才起作用。我试图实现的是用两个键做3个不同的动作。键1执行动作1且仅执行动作1,键2执行动作2且仅执行动作2,最后键1和键2同时执行或相继执行动作3且仅执行动作3@user1885099最后一个代码示例向您展示了实现该功能的方向。使用您的魔法思维,并根据您的需要进行修改:)更新了最后一个示例,以更好地匹配您在此处的第一条评论。但是,您可能需要调整某些状态变量的重置方式,具体取决于您想要的行为。谢谢你的帮助!:)