2009-05-05 31 views
102

Ich habe ein Problem. Grundsätzlich, wenn ein Benutzer einen Link ‚Bearbeiten‘ auf einer Seite klickt, wird die folgende jQuery-Code ausgeführt wird:Wie alle Click-Ereignishandler in Jquery zu entfernen sind

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

Auf diese Weise wird die OnClick-Ereignis der Schaltfläche speichern ruft die saveQuestion() Methode und übergibt die ID der Frage, auf die der Link 'Bearbeiten' geklickt wurde.

Aber wenn in der gleichen Sitzung der Benutzer bearbeiten auf 2 Fragen klickt, dann statt der vorherigen click Ereignishandler zu überschreiben, es stattdessen verursacht 2 Event-Handler ein laufen, die saveQuestion(1) nennen könnte und die andere nennen saveQuestion(2) könnten. Auf diese Weise überschreibt die eine Frage die andere.

Gibt es eine Möglichkeit, alle vorherigen click Ereignisse zu entfernen, die einer Schaltfläche zugewiesen wurden?

Antwort

179

würden Sie off() verwenden, um ein Ereignis zu entfernen, etwa so:

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

aber alle Click-Ereignisse an dieses Element gebunden werden entfernen. Wenn die Funktion mit SaveQuestion die einzige Ereignisgrenze ist, wird das obige geschehen. Wenn nicht Folgendes tun:

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

Seit jQuery 1.7, sollten Sie auf und statt abketten und unbind –

+0

@LockTar können Sie vorschlagen, wie dies stattdessen geschrieben werden sollte? –

+0

@JohnMagnolia Siehe meine Änderungen oben. –

13

Gibt es eine Möglichkeit, alle vorherigen Klickereignisse zu entfernen, die einer Schaltfläche zugewiesen wurden?

$('#saveBtn').unbind('click').click(function(){saveQuestion(id)}); 
2

Wenn Sie verwendet ...

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

... dann wird es einfacher sein, später zu entbinden.

+1

Wie siehst du das? Unabhängig davon, wie das Ereignis eines Elements gebunden ist, können sie immer auf die gleiche Weise aufgelöst werden ... $ ('# saveBtn'). Unbind ('was auch immer'); Jetzt, RE-BIND ... ja, deine Technik ist unter Umständen einfacher. – KyleFarris

+1

Wenn Sie alle Klickereignisse lösen, ist das nicht anders. Aber wenn Sie nur eine bestimmte Aktion lösen wollten, würde ich das Ereignis nicht an zwei Stellen neu schreiben wollen. Und wie Sie gesagt haben, wenn ich es später wieder binden möchte, ist das wieder einfacher, weil ich die Funktion nicht ein drittes Mal schreiben muss. –

6
$('#saveBtn').off('click').click(function(){saveQuestion(id)}); 
0
$('#saveBtn').off('click').on('click',function(){ 
    saveQuestion(id) 
}); 

Verwenden jQuerys off und on

Verwandte Themen