2010-10-01 9 views
7

Ho il seguente codice diCome utilizzare l'evento di commutazione con live?

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

ho bisogno di usare live, quindi nuovi elementi sarebbe anche vincolati. C'è qualche sintassi per farlo? O dovrò implementare un toggle sull'evento click?

Sto usando jQuery 1.4.2.

+1

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

+0

domanda duplicata! –

risposta

13

appena modificato la risposta di fehay in modo che non si basa su jQuery non associare i gestori di eventi duplicati durante toggle()

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

Inoltre, basta tenere a mente che i selettori per il live devono essere il più specifici possibile a causa del modo in cui la delega dell'evento funziona. Ogni volta che viene fatto clic sul documento, jQuery deve risalire l'albero controllando se l'elemento corrisponde al selettore. Per lo stesso motivo, lo .delegate() è molto più performante perché è possibile limitare l'area di acquisizione.

+0

Lo prenderò come un NO. – BrunoLM

+0

Grazie, questo funziona perfettamente! – Plippie

3

live supporta eventi personalizzati in jquery 1.4. Si potrebbe provare qualcosa di simile:

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

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

questo sembra funzionare bene anche senza un evento personalizzato:

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

+1 bel modo per farlo :) – Sarfraz

+1

Non sembra un bel modo per me. Stai collegando i gestori di eventi ogni volta che fai clic su di esso? –

+0

Sì, anche a me non sembrava così bello. +1 per la tua risposta. Mi piace di più Penso che un semplice clic live e il tuo interruttore sia "corretto" per farlo. – fehays

Problemi correlati