2012-03-29 9 views
17

Jak zastosować dyrektywę "off" do nazwanego programu obsługi?jquery włączające funkcje obsługi zdarzeń "on" i "off"

ex

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

bym go wyłączyć jak ten

$btn.off("click"); 

czy mogę zrobić coś innego teraz jest on przechowywany w zmiennej?

namedHandler.off("click"); 

lub

namedHandler.off(); 

itp

Wszelkie wskazówki mile widziane.

Odpowiedz

11

tego samego odniesienia do obiektu jQuery będzie $btninamedHandler. Oba zwracają odwołanie do tej samej rzeczy, więc zadanie przypisuje to samo.

Można go zmienić za pomocą jednej z metod: off().

Co może być bardziej nadaje się do przykładu jest namespacing your event, więc off('click', ...) nie rozpiąć wszystkieclick wydarzenia.

+0

To było coś, co chciałem wiedzieć. nazwany moduł obsługi jest właśnie przechowywaniem obiektu jQuery, a nie logiką obsługi zdarzeń. świetny – Chin

2

Możesz zdefiniować funkcję dla swojego handlera i przekazać ją do .off(), aby wyłączyć ten handler i .on(), aby go ponownie włączyć.

Dokumentacja przedstawiono przykłady to osiągnąć

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

Tak, właśnie w dokumentacji. –

11

Można również zrobić to

function handleClick(event) 
{ 
    // code 
} 

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

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

Niektóre przykłady użytecznych tylko on/off here.

8

Oprócz tego, co @alex & @WereWolf powiedział, że często to przydatne:

Dla pojedynczej procedury obsługi zdarzeń zastosowanie, można użyć .one() zamiast .on() następnie .off()

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

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

+0

To raczej komentarz, a nie odpowiedź na pytanie. –

Powiązane problemy