2012-03-29 14 views
17

Wie würde ich die "off" -Richtlinie auf einen benannten Handler anwenden?jquery Turning "on" und "off" Event-Handler

ex

var $btn = $("#theBtn"); 
var namedHandler = $btn.on("click", function() { 
//do something 
//then turn off 
}) 

würde ich es ausschalten wie diese

$btn.off("click"); 

oder könnte ich etwas anderes tun, jetzt ist es in einer Variablen gespeichert?

namedHandler.off("click"); 

oder

namedHandler.off(); 

usw.

Alle Zeiger sehr geschätzt.

Antwort

11

Die gleiche Referenz wird in seine $btnundnamedHandler auf das jQuery-Objekt zu erreichen. Beide geben einen Verweis auf das gleiche zurück, so dass die Zuweisung dasselbe zuweist.

Sie können es off() mit jeder Methode drehen.

Was ist mit Ihrem Beispiel besser geeignet sein kann, ist namespacing your event, so wird off('click', ...)alleclick Ereignisse nicht lösen.

+0

Das ist ziemlich genau das, was ich wissen wollte. Der benannte Handler speichert nur ein jquery-Objekt und keine Ereignisbehandlungslogik. groß – Chin

2

Sie könnten eine Funktion für Ihren Handler definieren und diese an .off() übergeben, um diesen Handler zu deaktivieren, und .on(), um ihn wieder zu aktivieren.

Die Dokumentation enthält Beispiele diese

http://api.jquery.com/off/

function aClick() { 
    $("div").show().fadeOut("slow"); 
} 
$("#bind").click(function() { 
    $("body").on("click", "#theone", aClick) 
    .find("#theone").text("Can Click!"); 
}); 
$("#unbind").click(function() { 
    $("body").off("click", "#theone", aClick) 
    .find("#theone").text("Does nothing..."); 
}); 
+1

Ja, genau dort in der Dokumentation. –

11

können Sie auch tun dies

function handleClick(event) 
{ 
    // code 
} 

$('#btn').on('click', handleClick); 

$('#btn').off('click', handleClick); 

Einige nützliche Beispiele nur etwa ein/aus here.

8

Zusätzlich zu dem, was @ Alex & @WereWolf sagte, finde ich oft dies nützlich:

Für einen Einsatz Event-Handler können Sie .one() statt .on() von .off() gefolgt verwenden

$("#foo").one("click", function() { 
    alert("This will be displayed only once."); 
}); 

http://api.jquery.com/one/

+0

Dies ist eher ein Kommentar, keine Antwort auf die Frage. –