web-dev-qa-db-ja.com

JqueryですべてのClickイベントハンドラーを削除する方法

問題があります。基本的に、ユーザーがページの「編集」リンクをクリックすると、次のJqueryコードが実行されます。

$("#saveBtn").click(function () {
    saveQuestion(id);
});

これにより、保存ボタンのonClickイベントはsaveQuestion()メソッドを呼び出し、「編集」リンクがクリックされた質問のIDを渡します。

ただし、同じセッションでユーザーが2つの質問の編集をクリックすると、前のclickイベントハンドラーを上書きする代わりに、2つのイベントハンドラーが実行されます。1つはsaveQuestion(1)を呼び出し、もう1つはsaveQuestion(2)を呼び出します。これを行うと、1つの質問が他の質問を上書きします。

ボタンに割り当てられている以前のclickイベントをすべて削除する方法はありますか?

114
Click Upvote

off() を使用して、次のようにイベントを削除します。

$("#saveBtn").off("click");

しかし、これはすべてのクリックイベントをこの要素にバインドして削除します。 SaveQuestionを持つ関数が唯一のバインドされたイベントである場合、上記がそれを行います。そうでない場合は、次を実行します。

$("#saveBtn").off("click").click(function() { saveQuestion(id); });
194
TStamper

ボタンに割り当てられている以前のクリックイベントをすべて削除する方法はありますか?

$('#saveBtn').unbind('click').click(function(){saveQuestion(id)});
13
Rafael
$('#saveBtn').off('click').click(function(){saveQuestion(id)});
7
Fo Nko

使用した場合...

$(function(){
    function myFunc() {
        // ... do something ...
    };
    $('#saveBtn').click(myFunc);
});

...その後、後でバインドを解除する方が簡単になります。

2
Jarrett Meyer
$('#saveBtn').off('click').on('click',function(){
   saveQuestion(id)
});

Jqueryの off および on を使用します

0
Ninjaneer