0

キーダウン機能をセットアップしました。左、右、上、または下の矢印キーが押されたかどうかに応じて、さまざまなことをしたいと考えています。それは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;
    }       

}); 
4

3 に答える 3

5

なぜそれもあなたのswitch声明の中になければならないのですか?

切り替え後に別のifステートメントを作成します。

if (keyCode >= 37 && keyCode <= 40) {
    // run your code here
}
于 2012-07-18T01:55:46.620 に答える
2

1 つの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 に答える