2010-10-01 11 views
7

Mam następujący kodJak używać opcji przełączania wydarzeń na żywo?

$(".reply").toggle 
(
    function() 
    { 
     x1(); 
    }, 
    function() 
    { 
     x2(); 
    } 
); 

muszę korzystać live, więc nowe elementy będą również związane. Czy jest jakaś składnia, aby to zrobić? Czy będę musiał wprowadzić toggle w wydarzeniu click?

Używam jQuery 1.4.2.

+1

Sprawdź http://stackoverflow.com/questions/2172614/using-jquery-live-with-toggle-event – Alec

+0

duplikat pytania! –

Odpowiedz

13

Wystarczy zmodyfikowana odpowiedź fehay tak, że nie opiera się na jQuery nie dołączając duplikaty obsługi zdarzeń podczas toggle()

$(".reply").live('click', function() { 
    var toggled = $(this).data('toggled'); 
    $(this).data('toggled', !toggled); 
    if (!toggled) { 
     x1(); 
    } 
    else { 
     x2(); 
    } 
}); 

Poza tym, po prostu pamiętać, że selektory dla live muszą być jak najbardziej konkretny ze względu na sposób Delegacja wydarzeń działa. Za każdym razem, gdy coś zostanie kliknięte w dokument, jQuery musi wspiąć się na drzewo sprawdzając, czy element pasuje do selektora. Z tego samego powodu, .delegate() jest znacznie bardziej wydajne, ponieważ można ograniczyć obszar przechwytywania.

+0

Przyjmę to jako NIE. – BrunoLM

+0

Thanx, to działa bez zarzutu! – Plippie

3

live obsługuje niestandardowe zdarzenia w jquery 1.4. Można spróbować czegoś takiego:

$(function() { 
    $(".reply").live("customToggle", function() { 
     $(this).toggle(
      function() { 
       x1(); 
      }, 
      function() { 
       x2(); 
      } 
     ); 
    }); 

    $(".reply").live('click', function() { 
     $(this).trigger('customToggle'); 
    }); 
}); 

wydaje się działać prawidłowo bez niestandardowej imprezy:

$(".reply").live('click', function() { 
    $(this).toggle(
      function() { 
       x1(); 
      }, 
      function() { 
       x2(); 
      } 
     ); 
    $(this).trigger('click'); 
}); 
+0

+ 1 fajny sposób na zrobienie tego :) – Sarfraz

+1

Nie wydaje mi się to miłą drogą. Załączasz programy obsługi zdarzeń za każdym razem, gdy je klikniesz? –

+0

Tak, to też nie wydawało mi się takie dobre. +1 za odpowiedź. Lubię to lepiej. Myślę, że proste kliknięcie na żywo i własny przełącznik to "poprawny" sposób na zrobienie tego. – fehays

Powiązane problemy