2009-11-25 18 views
11

więc istnieją dwa ograniczenia do mojego pytania:jQuery: Wiązanie i niewiążące żywo kliknij Zdarzenia

  1. muszę użyć zewnętrznego wywołanie funkcji w moim kliknij zdarzenie i
  2. muszę używać na żywo zdarzenie click, raczej wiążą typowe zdarzenie kliknięcia.

Mój problem polega na tym, że próbuję usunąć wiązanie zdarzenia kliknięcia po jego wystąpieniu, a następnie ponownie je powiązać po ukończeniu kodu zdarzenia kliknięcia. Robię to, aby zapobiec zduplikowanym kliknięciom, podczas gdy kod jest obecnie w toku (mam animację FadeIn/Out, która pozwoli na kliknięcie przycisku dwa lub trzy razy szybciej, wykonując w ten sposób mój kod 2 lub 3 razy, co jest pożądane) . Kod używam jest poniżej:

$item.live("click", handleClick); 

i

function handleClick(ev) { 

    $(this).die("click"); 

    // perform code here, including things with 'ev' 

    $(this).live("click", handleClick); 
} 

jestem szalony, czy powinno to być działa bez żadnych problemów? Teraz mogę kliknąć raz, ale nie później. Tak więc die() działa, ale nie jest z tego powodu ponownie związana z tą funkcją. Zweryfikowałem, że osiąga on kod w handleClick(), aby ponownie powiązać kliknięcie "na żywo".

Wszelkie pomysły? Każda pomoc będzie bardzo ceniona. Dzięki.

Odpowiedz

8

Według documentation:

żywo wydarzeń obecnie tylko praca, gdy wykorzystane przeciwko selektora.

$(this) nie jest selektorem.

+0

@Greg, ciekawe. Może gdybym przypisał zdarzenie kliknięcia na żywo w funkcji jako takie: 'var $ tempVar = $ ('#' + $ (this) .attr ('id'))', a następnie powiedział '$ tempVar.live (" click " ", handleClick)" Czy uważasz, że to zadziała? –

+0

Ja * myślę * tak ... – Greg

+2

Tak, to zadziała – PetersenDidIt

6

Aby rozpiąć procedur obsługi kliknięcia ze wszystkich, którzy byli związani z użyciem .live(), użyj .die() metoda:

$(".clickme").die("click"); 
0

Można użyć tego wzoru do rozpiąć elementu klikniętego i niech wszyscy inni żyją :

$('a.myselector').live('click', function() { 

    // do things 

    $(this).unbind('click').live('click', function() {return false;}); 

    return false; // block the link 
}); 

prace z jQuery 1.8.2