2013-01-07 11 views
7

Ho questo semplice codice. http://jsfiddle.net/borth/BmEZv/ Se si fa clic sul collegamento una volta, funziona correttamente. Se fai clic su di esso una seconda volta, non funziona. A causa del caricamento del codice HTML in html dopo il caricamento del DOM, ho provato. On, .bind, .delegate e .live. Nessuno di loro funziona eccetto per .live che viene deprecato (sto usando jquery 1.7.2).Alternativa a jquery live che può funzionare

Qualcuno può spiegare perché .live è l'unica funzione che funziona e perché gli altri non funzionano (o se sto facendo qualcosa di sbagliato con le altre funzioni).


$(document).ready(function(){ 
    $(".OpenPopup").bind('click', function(e){ 
     alert('test .OpenPopup'); 
     // do something 
     return false; 
    }); 
    $(".EditIcon").bind('click', function(){ 
     alert('test .EditIcon'); 
     // do something 
     $("#ABC").html('<div class="EditIcon OpenPopup" pwidth="800" pheight="500" ptitle="EditText">click here again</div>'); 
    }); 
}); 


<div id="ABC"><div class="EditIcon OpenPopup" pwidth="800" pheight="500" ptitle="EditText">click here</div></div> 
+2

'.On' è la sostituzione ufficiale per' .Live' –

+2

leggere la documentazione Domande frequenti jQuery per risposta a 'why' – charlietfl

+0

ho preso a lavorare con .on(). Ho avuto la sintassi sbagliata. –

risposta

16
$(document).ready(function(){ 
     $(document.body).on('click', ".OpenPopup", function(e){ 
      alert('test .OpenPopup'); 
      // do something 
      return false; 
     }); 
     $(document.body).on('click', ".EditIcon", function(){ 
      alert('test .EditIcon'); 
      // do something 
      $("#ABC").html('<div class="EditIcon OpenPopup" pwidth="800" pheight="500" ptitle="Edit Text">click here again</div>'); 
     }); 
    }); 
+0

wow Non ho mai pensato a questo modo, sto ancora cercando un modo alternativo di .live nell'ultima build di jquery. Esiste qualche dichiarazione ufficiale? Grazie per il frammento Proverò questo. –

+1

Ma come lo scegli tu. openpopup su cui è stato fatto clic? – PixMach

+0

'e.target' all'interno del gestore di clic - [jQuery event.target doc] (https://api.jquery.com/event.target/) –

2

.on() può essere utilizzato with or without delegation, sotto è un esempio di on() mediante la delega.

$("#ABC").on('click', ".OpenPopup", function(e){ 

http://jsfiddle.net/BmEZv/1/

+0

Questo non funziona. Funziona al primo clic come previsto, ma al secondo clic registra solo il primo avviso utilizzando .on(). $ (". EditIcon"). Bind ('click', function() { non viene licenziato. Ho anche provato con .delegate(). –

+0

@BrandonOrth vuoi che riscrivi l'intero codice per te ?, basta cambiare il secondo binding a 'on()' – Musa

+0

Ho modificato il tuo esempio per aggiungere .on() al clic .EditIcon. Works. Grazie. –

0

seguito @Dhofca davvero funzionato. Sto solo mostrando un esempio che ho provato con la parola chiave 'this'.

$(document.body).on('click', ".query-result table tr", function() { 
    var el = $(this); 
    el.closest('table').find('tr').removeClass('dotted'); 
    el.addClass('dotted'); 
});