【问题标题】:JQuery, check for arrow key pressed swith statementJQuery,检查箭头键按下的开关语句
【发布时间】:2012-07-17 00:11:51
【问题描述】:

我已经设置了一个 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;
    }       

}); 

【问题讨论】:

  • case arrow.left: case arrow.right: case arrow.up: case arrow.down: // do something for arrows break;
  • 这要么永远不会被执行,要么总是被执行而不是 switch 语句中的每个特定箭头代码块。

标签: jquery switch-statement arrow-keys


【解决方案1】:

为什么你的switch 语句中也必须包含它?

在切换后单独声明if

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

【讨论】:

  • 谢谢你,我用了这个,虽然我不得不使用“e.which”来检查按下了哪个键,因为“keyCode”没有返回任何值,不知道为什么?跨度>
【解决方案2】:

如果我理解正确,这应该可以满足您的需求。

另一种增加可读性的方法

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

【讨论】:

  • 感谢您的回复,这也使它非常整洁!
【解决方案3】:

单个 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。)

如果您需要对没有连续键码的键执行类似操作,那么显然您不能使用&gt;= &amp;&amp; &lt;= 条件,因此您可以执行以下操作:

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

【讨论】:

    猜你喜欢
    • 2022-07-26
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    相关资源
    最近更新 更多