JQuery,检查箭头键按下开关语句

时间:2012-07-18 01:50:46

标签: jquery switch-statement arrow-keys

我已经设置了一个keydown函数,我想做不同的事情,这取决于是否按下了向左,向右,向上或向下箭头键。这是使用switch语句,但我也想在按下任何箭头键时执行某些操作,但无法弄明白。我的代码:

$(document).keydown(function (e) {

var keyCode = e.keyCode || e.which,
    arrow = {left: 37, up: 38, right: 39, down: 40 },

switch (keyCode) {

    case arrow.left:
        // do something left
    break;

    case arrow.right:
        // do something right
    break;
}       

}); 

我真的只想要一行代码,我可以检查是否按下任何箭头键,但无法弄明白,例如:

case arrow:
    // do something for any arrow keys
break;

只使用“案例箭头似乎不起作用。有人可以帮忙吗?

提前致谢!

编辑:感谢大家的帮助。这是我的最终代码,对任何人来说都是:

$(document).keydown(function (e) {

    if (e.which >= 37 && e.which <= 40) {
        $('p.key-notification').fadeOut('slow');
    }

    var keyCode = e.keyCode || e.which,
    arrow = {left: 37, up: 38, right: 39, down: 40 },

    switch (keyCode) {

        case arrow.left:
            // do something left
        break;

        case arrow.right:
            // do something right
        break;
    }       

}); 

3 个答案:

答案 0 :(得分:5)

为什么这也必须在您的switch声明中?

切换后单独生成if语句:

if (keyCode >= 37 && keyCode <= 40) {
    // run your code here
}

答案 1 :(得分:2)

单个switch语句无法在多个条件下匹配 - 您可以使用直播,但不会在后续情况下评估表达式,并且无法达到预期效果。我会这样做:

if (keyCode >= 37 && keyCode <= 40) {
   // do any processing for _any_ arrow key here if it should happen
   // before individual arrow key processing

   switch (keyCode) {

      case arrow.left:
        // do something left
        break;

      case arrow.right:
        // do something right
        break;
   }

   // do any processing for _any_ arrow key here if it should happen
   // after individual key processing
}

switch置于if语句中可以在没有任何案例匹配的情况下保存评估。 (很明显,如果您以后希望switch处理其他密钥,则需要将其移出if。)

如果您需要对没有连续键码的键执行类似操作,那么显然您无法使用>= && <=条件,因此您可以执行以下操作:

if (keyCode === arrow.left || keyCode === arrow.right
   || keyCode === arrow.up || keyCode === arrow.down) {

答案 2 :(得分:1)

如果我理解正确,这应该适合您的需要。

另一种增加可读性的方法

var  arrow = { left: 37, up: 38, right: 39, down: 40 };

其中任何一个

switch (evt.keyCode) {
    case arrow.right:
    case arrow.left:
    case arrow.up:
    case arrow.down:
        // Do something
        break;
}

其中一个

switch (evt.keyCode) {
    case arrow.right:
        // Do right
        break;
    case arrow.left:
        // Do left
        break;
    case arrow.up:
        // Do up
        break;
    case arrow.down:
        // Do down
        break;
}