2008-09-23 13 views
7

Ich möchte ein click -Ereignis an ein Button-Element anhängen und später entfernen, aber ich kann nicht unclick() oder unbind() -Ereignis (s) wie erwartet funktionieren. Im unten stehenden Code ist die Schaltfläche "hellbraun" und das Klickereignis funktioniert.Ereignisbehandlung jQuery unclick() und unbind() Ereignisse?

window.onload = init; 
function init() { 
    $("#startButton").css('background-color', 'beige').click(process_click); 
    $("#startButton").css('background-color', 'tan').unclick(); 
} 

Wie kann ich Ereignisse von meinen Elementen entfernen?

Antwort

18

Es gibt keine unclick(). Woher hast du das?

Sie können aus einem Element einzelnen Event-Handler entfernen, indem unbind Aufruf:

$("#startButton").unbind("click", process_click); 

Wenn Sie alle Handler entfernen möchten, oder verwendet eine anonyme Funktion als Handler, können Sie das zweite Argument unbind() auslassen :

$("#startButton").unbind("click"); 
+0

http://www.visualjquery.com/1.0.4.html unclick (fn) Entfernt ein gebundenes Klickereignis von jedem der übereinstimmenden Elemente. Sie müssen die identische Funktion übergeben, die in der ursprünglichen Bindungsmethode verwendet wurde. –

+2

Danke für die Info. Ich grub ein wenig tiefer und fand heraus, dass unclick() in jQuery 1.1 entfernt wurde. – Jim

3

unbind ist dein Freund.

$("#startButton").unbind('click') 
0

Sind Sie sicher, dass Sie es lösen möchten? Was, wenn Sie es später wieder und wieder und wieder binden wollen? Ich mag die dynamische Ereignisbehandlung bind/unbind nicht, da sie dazu neigt, außer Kontrolle zu geraten, wenn sie von verschiedenen Punkten Ihres Codes aus aufgerufen wird.

Sie möchten können alternative Optionen prüfen:

  • Änderung der Schaltfläche "disabled" Eigenschaft
  • Ihre Logik in "process_click" -Funktion

Just my 2 cents, kein universelles Arbeitsgerät Lösung.

6

Oder man könnte eine Situation, wo Sie die Klick-Funktion entbinden wollen einfach nur, nachdem Sie es verwenden, wie ich hatte:

$('#selector').click(function(event){ 
    alert(1); 
    $(this).unbind(event); 
});