2011-11-06 14 views
21

I metodi jQuery 1.7 .on() e .off() sostituiscono .live() e così via.jQuery 1.7 metodi on() e off() per elementi dinamici

ho provato con un elemento di dinamica:

$(".myList").on('click', function(e){ 
    alert('hello world'); 
}); 

Questo non funziona per me per elementi aggiunti dopo DOM è stato caricato.

Il codice è sopra un esempio valido per i metodi di jQuery 1.7 .on() e .off()?

risposta

33

Vedere http://blog.jquery.com/2011/11/03/jquery-1-7-released/ per esempi live() -> on/off() (e altro).

questo è il loro esempio per la conversione dal vivo per il:

$('a').live('click', fn); 
$(document).on('click', 'a', fn); 

Così il vostro esempio diventa a:

$(document).on('click', '.myList', function(e){ 
    alert('hello world'); 
}); 
+4

Qualcosa da realizzare però. on() non funziona con elementi creati dinamicamente che vengono aggiunti al corpo E hanno uno z-index negativo. Per qualsiasi motivo, il clic non attraversa mai l'elemento contenente il corpo. Il tag del corpo continuerà a catturare tutti i clic. Anche se rendi il corpo un indice z inferiore rispetto all'elemento aggiunto al DOM. TUTTAVIA live() ha il potere di indirizzare questi elementi indicizzati negativamente anche se su() non può. – Alex

+1

@Alex perché dovresti creare dinamicamente elementi con z-index negativo? – Omu

+1

e, soprattutto, da jQuery versione 1.9.0 - il metodo live() non è più disponibile. –

4

Ecco un piccolo esempio:

http://jsfiddle.net/zzSjK/

<script type="text/javascript"> 
    $(function(){ 
     $(document).on('click','.clickme' , function(e){ 
      addtext() 
     }); 
     function addtext() { 
      $('.myList').append('<div class="clickme">click me</div>') 
     } 
    }) 
</script> 

<div class="myList"> 
    <div class="clickme">-click-</div> 
</div> 
2

"Bind" con:

$(document).on('click','.myDiv',function(){ ... }); 

E "unbind" con:

$(document).off('click','.myDiv'); 
+0

downvoted per incidente. scusa :( –