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最后一个代码示例向您展示了实现该功能的方向。使用您的魔法思维,并根据您的需要进行修改:)更新了最后一个示例,以更好地匹配您在此处的第一条评论。但是,您可能需要调整某些状态变量的重置方式,具体取决于您想要的行为。谢谢你的帮助!:)