2011-11-06 13 views
21

Se supone que los métodos de jQuery 1.7 .on() y .off() reemplazan a .live() y demás.métodos jQuery 1.7 on() y off() para elementos dinámicos

he probado con un elemento dinámico:

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

Esto no está funcionando para mí por elementos añadidos después de DOM se carga.

¿El código es un ejemplo válido para los métodos .on() y .off() de jQuery 1.7?

Respuesta

33

Ver http://blog.jquery.com/2011/11/03/jquery-1-7-released/ para live() -> on/off() (y otros) ejemplos.

Esta es su ejemplo para la conversión en vivo a en:

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

Así que su ejemplo se vuelve a:

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

Algo dé cuenta sin embargo. on() no funciona con elementos creados dinámicamente que se agregan al cuerpo Y tienen un índice z negativo. Por alguna razón, el clic nunca pasa más allá del elemento que contiene el cuerpo. La etiqueta del cuerpo seguirá atrapando todos los clics. Incluso si hace que el cuerpo sea un índice z más bajo que el elemento que se agrega al DOM. SIN EMBARGO live() TIENE EL PODER DE DIRIGIR ESTOS ÍTEMS MENOS INDICADOS, AUN CUANDO ON() NO PUEDE. – Alex

+1

@Alex ¿por qué necesitaría crear dinámicamente elementos con índice z negativo? – Omu

+1

y lo más importante a partir de jQuery versión 1.9.0 - el método live() ya no está disponible. –

4

Aquí hay un pequeño ejemplo:

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(){ ... }); 

y "desatar" con:

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

downvoted por accidente. lo siento :( –

Cuestiones relacionadas