Javascript切换案例1,案例2和案例1和2

时间:2014-09-30 17:26:52

标签: javascript jquery

这是我的代码:

$(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()。有解决方法吗?

3 个答案:

答案 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将调用