-1
$(document).ready(function(){
    $(document).bind('keydown',function(e){
        key  = e.keyCode;
        if(key == 37){
            left();
        }else if(key == 38){
            up();
        }else if(key == 39){
            right();
        }else if(key == 40){
            down();
        }
    });
            alert("Hi");
});

「こんにちは」というアラートは 1 回だけ$(document).bindです。のようなものbreak;か、return;多分?

4

2 に答える 2

6

「こんにちは」は、keydownハンドラー内にないため、一度だけアラートを出します...ハンドラー内にありますready

$(document).ready(function(){
    $(document).bind('keydown',function(e){
        key  = e.keyCode;
        if(key == 37){
            left();
        }else if(key == 38){
            up();
        }else if(key == 39){
            right();
        }else if(key == 40){
            down();
        }
    });// keydown handler ends here
            alert("Hi");
});

また、補足として、 のconsole代わりにメソッドを使用してみてくださいalert()。より説明的であり、非ブロッキングであるためです。

アップデート

以下のコメントから、コードで実際に何が起こっているのかについてかなり混乱していることがわかります... それでは、順を追って説明しましょう。

$(document).ready(function(){

ここでは、ハンドラーをDOM readyイベントにバインドしています。これは、ブラウザがドキュメント構造の構築を完了すると発生します。ロードする必要がある外部アセットは考慮されていません。

$(document).bind('keydown', function(e){

これで、ハンドラーをkeydownイベントにバインドしています。イベントがレベルに達すると、関数内のすべて(および関数内のみ) が実行されます。keydowndocument

key = e.keyCode;

keyCodeイベントのプロパティをkey変数に割り当てます。var範囲を維持するために、キーワードを前に付けることをお勧めします。var key = e.keyCode;

if(key == 37){
    left();
}else if(key == 38){
    up();
}else if(key == 39){
    right();
}else if(key == 40){
     down();
}

これで、一連のif/ブロックをジャンプして、以前に宣言された変数が条件の 1 つに一致する場合、 、、および関数elseを呼び出しています。leftuprightdownkey

});

これはハンドラーのENDです。keydown

alert("Hi");

alert()ではメッセージです。これは、keydownハンドラーが BOUND された直後に行われますが、そのハンドラーの実行後ではありません。この行は、ドキュメントreadyハンドラーの一部として 1 回実行されます。

});

これでドキュメントreadyハンドラは終了です。

于 2013-02-21T04:19:51.643 に答える
0

何度も使いたくないと思いますkeydown

次のようにonoff()を使用できます。

$(document).ready(function(){
    $(document).on('keydown',function(e){
        key  = e.keyCode;
        if(key == 37){
            left();
        }else if(key == 38){
            up();
        }else if(key == 39){
            right();
        }else if(key == 40){
            down();
        }
        $(document).off('keydown'); 
    });// keydown handler ends here
            alert("Hi");
});

または、1回だけ起動するone()を使用することもできます。

$(document).ready(function(){
        $(document).one('keydown',function(e){
            key  = e.keyCode;
            if(key == 37){
                left();
            }else if(key == 38){
                up();
            }else if(key == 39){
                right();
            }else if(key == 40){
                down();
            }  
        });// keydown handler ends here
                alert("Hi");
    });
于 2013-02-21T04:37:17.597 に答える