0

我已经设置了一个 keydown 功能,我想根据是否按下左、右、上或下箭头键来做不同的事情。这是使用 switch 语句工作的,但我也想在按下 ANY 箭头键时做一些事情,但无法弄清楚。我的代码:

$(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;
    }       

}); 
4

3 回答 3

5

为什么这也必须在你的switch陈述中?

if切换后单独声明:

if (keyCode >= 37 && keyCode <= 40) {
    // run your code here
}
于 2012-07-18T01:55:46.620 回答
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) {
于 2012-07-18T02:05:12.970 回答
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;
}
于 2014-05-06T05:58:48.647 回答