0

テーブルに矢印キー ナビゲーションを使用しています。現在選択されている行に基づいて、div にいくつかの詳細をロードする必要があります。行を選択すると、サーバーへの Ajax 呼び出しが行われ、詳細が取得され、その詳細が div に読み込まれます。これは、Ajax 呼び出しと div の更新に時間がかかる場合があります。この時間内に、キーダウン イベントを無効にしたいと考えています。

     $('#tbl tbody').on('keydown', function (event) {

        var keyCode = event.keyCode;

        if (keyCode >= 37 && keyCode <= 40) {
            event.preventDefault();
            ChangeTarget(keyCode)
        }
    });

しばらくの間、キーダウンイベントのバインドを解除または一時停止したいだけです。

タイムアウトを使用しようとしましたが、それは私が望むようには役に立ちません。

$('#tbl tbody').on('keydown', function (event) {
            var keyCode = event.keyCode;

            if (keyCode >= 37 && keyCode <= 40) {
                event.preventDefault();
                ChangeTarget(keyCode);
                setTimeout(function () {
                }, 10000);
            }
        });

Ajax がその仕事を完了するまで、重要なイベントを記録したくありません!!!

4

1 に答える 1

3

unbind の代わりに boolean フラグを使用できます。

次に例を示します。

var keyNavigationDisabled = false;

$('#tbl tbody').on('keydown', function (event) {
    if (keyNavigationDisabled) return;
    var keyCode = event.keyCode;
    if (keyCode >= 37 && keyCode <= 40) {
        event.preventDefault();
        ChangeTarget(keyCode)
    }
});

function getRemoteData() {
    keyNavigationDisabled = true;
    $.ajax({
        url: 'http://example.com',
        complete: function () {
           keyNavigationDisabled = false;
        }
    });
}
于 2013-01-17T08:58:55.887 に答える