2011-02-04 16 views
6

Tengo un simple jQuery ('div # estrella'). Clic (función.jQuery.click no funciona después de añadir elementos al DOM

La función se activa una vez cuando se carga inicialmente el DOM, pero en una tarde tiempo, agrego una div # star al DOM, y en ese punto la función de clic no funciona.

Estoy usando jQuery 1.4.4, y hasta donde yo sé, no debería necesitar usarlo. live or .bind nunca más. Nunca hay más de una div # estrella en el DOM en un momento dado. Intenté cambiar de id = "star" a class = "star" pero eso no ayudó.

Any sugerencias sobre cómo hacer que esto funcione o ¿por qué no está funcionando?

He tenido el .click dentro de jQuery (documento) .ready, y en un archivo js externo, y ninguno funciona después de agregar el div al DOM.

+1

* "Estoy usando jQuery 1.4.4, y hasta donde yo sé, ya no necesitaría usar .live o .bind." * No, eso no es cierto. Cuando usa 'click' o cualquiera de los otros accesos directos para' bind', se trata de lo que existe * en ese momento *. El propósito de 'live' y' delegate' es decir explícitamente "resolver esto más tarde cuando el evento realmente suceda"." –

+0

Gracias TJ, por alguna razón, pensé .live había quedado en desuso – pedalpete

Respuesta

0

usuario método "directo" $("div#star").live("click", function() {});

Doc

2

Es necesario utilizar ya sea live o delegate aquí. Nada ha cambiado en este departamento desde jQuery 1.4.4.

Trate de pensarlo así: click y bind adjuntar un evento al elemento en sí, por lo que cuando el elemento desaparece, toda la información sobre el evento también lo hace. live adjunta el evento en el nivel del documento e incluye información sobre qué elemento y tipo de evento se debe escuchar. delegate hace lo mismo, excepto que adjunta la información del evento al elemento principal que desee.

+1

+1 - gracias por la explicación sobre en vivo - realmente me ayudó – adrianos

9

A partir de jQuery 1.7, el método .live() está en desuso. La recomendación actual es usar .on() que proporciona toda la funcionalidad que cubre los métodos anteriores de adjuntar manejadores de eventos. En pocas palabras, no tiene que decidir más ya que en() lo hace todo.

documentación está convenientemente dispuesto en la ayuda para la conversión de los métodos de evento jQuery más edad .bind(), .delegate() y .live()

4

tratar
.on('event', 'element', function(){ //code })

+0

Esta parece ser la única forma en que conseguí trabajar en las versiones jQuery más recientes. –

10

Esto funciona con jQuery 2.0.3

$(document).on('click', '#myDiv', function() { 
    myFunc(); 
}); 
+0

tuve el mismo problema. Esta solución funcionó para mí, muchas gracias;) –

0

Puede usar deledate en su lugar en:

$(document).delegate('click', "selector", function() { 
    //your code 
}); 

espero que le ayudará.

Cuestiones relacionadas