5

私はこれを持っています:

$(function(){
    //remove keydown doSomething2
    $("body").keydown(doSomething1);
});

他のビューでは、私はこれを持っています:

$(function(){
    //remove keydown doSomething1
    $("body").keydown(doSomething2);
});

コメントにあることを行う方法は?私の現在のコードでは、doSomething1 と doSomething2 の両方が呼び出されます。必要のないものを無効にしたい。

4

3 に答える 3

10

jQuery でイベント リスナーを削除するには、次を使用できます.off()

$("body").off("keydown", doSomething2);

keydownメソッドは の単なるショートカットであることを忘れないでください.on("keydown", ...)

ただし、それらを「無効にする」には、現在選択されているビューに基づいて異なることを実行するハンドラーを 1 つだけ持つか、両方をバインドして、それぞれに適切なビューが現在選択されていることを簡単に確認する方が簡単な場合があります。

于 2012-08-03T13:27:14.797 に答える
4

doSomething2関数参照の場合、 .off()(jQuery 1.7+)を使用するか.unbind()、jQuery バインド イベント ハンドラーを削除できます。

$('body').off('keydown', doSomething2);

// or

$('body').unbind('keydown', doSomething2);

実行順序が要因になることに注意してください。イベント ハンドラーをアンバインドするコードが最初に実行された場合、効果はありません。一般に、jQuery イベント ハンドラーはバインドされた順序でトリガーされるため、質問の最初のコード スニペットが最初に実行される場合、このアプローチは機能しません (順序を変更する必要があります)。

于 2012-08-03T13:27:45.623 に答える
4

jQueryを使用して以下のようにこれを試してください:

$(function(){
    // this would remove keydown from body
    $("body").unbind('keydown', doSomething2);
});
于 2012-08-03T13:29:07.483 に答える