Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Duda para manejar eventos.

Estas en el tema de Duda para manejar eventos. en el foro de Frameworks JS en Foros del Web. Me ha pasado lo siguiente y no logro comprender como se podria resolver. Tengo un evento en jquery que carga contenido externo mediante load() y ...
  #1 (permalink)  
Antiguo 20/01/2010, 10:24
 
Fecha de Ingreso: agosto-2008
Ubicación: Puebla, Mexico.
Mensajes: 84
Antigüedad: 15 años, 8 meses
Puntos: 0
Duda para manejar eventos.

Me ha pasado lo siguiente y no logro comprender como se podria resolver.

Tengo un evento en jquery que carga contenido externo mediante load() y la inyecta en un div, hasta ahi todo bien, el problema viene cuando manejo un evento que se activa con algun elemento que se encuentra en el contenido externo que se cargo, por que el evento no se realiza.

Es algo mas o menos asi

Código HTML:
Ver original
  1. pagina1  ...contenido de mi pagina 1 con mi primer evento
  2. <a href="#" id="algo">primer evento</a>
  3. <div></div>

Código HTML:
Ver original
  1. pagina2 ....contenido externo que se va a cargar en la pagina 1  y que tiene otro evento
  2. ....mucho contenido por aqui
  3. <input type="submit" value="algoporaqui" id="algo2">segunto evento</a>


Código Javascript:
Ver original
  1. //este evento carga el contenido de la pagina 2 y lo inyecta en pagina 1....perfecto !...todo bien
  2. $('#algo').click(function(){
  3.      $('div').load('pagina2.html');
  4. });
  5.  
  6.  
  7. //este evento deberia mostrar un alert, pero como se esta inyectando en pagina1 mediante load...no se ejecuta !  WTF
  8. $('#algo2').click(function(){
  9.      alert('yo soy otro evento');
  10. });


Tiene mucha logica, load() carga e inyecta codigo externo 'en caliente' por lo que esa parte del codigo no esta realmente en el DOM entonces cuando el segundo evento es llamado pues no encuentra el elemento y no se activa, a alguno de ustedes les ha pasado?...como lo resolvieron?...algunas opciones?

Última edición por a77icu5; 20/01/2010 a las 10:34
  #2 (permalink)  
Antiguo 20/01/2010, 10:59
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 16 años, 7 meses
Puntos: 20
Respuesta: Duda para manejar eventos.

Claro que lo que cargas mediante load esta en el DOM, ¿Porque crees que lo ves en el navegador?

Lo que necesitas hacer es utilizar live() para detectar eventos de elementos que crees dinamicamente en el DOM. Algo asi:

Código Javascript:
Ver original
  1. $('#id').live('click', function(){
  2.  
  3. });
__________________
I see dead pixels
  #3 (permalink)  
Antiguo 20/01/2010, 15:15
 
Fecha de Ingreso: junio-2008
Ubicación: Colombia
Mensajes: 207
Antigüedad: 15 años, 9 meses
Puntos: 12
Respuesta: Duda para manejar eventos.

tengo solo una palabra para ti: "Livequery", live() funciona si los eventos son iniciados por el usuario de alguna manera, ya sea haciendo click en algo o moviendo el mouse, pero que pasa si necesitamos que un elemento del DOM ejecute una accion sin que el usuario no intervenga en ello, por ejemplo digamos que cargue un div en caliente en el DOM actual y dentro de ese div hay un span el cual debe ir a cargar otro codigo automaticamente mediante load(), en este caso el usuario no ejecuta la carga del span, es ahi donde Livequery predomina sobre el live().

Para mas info al respecto.
http://plugins.jquery.com/project/livequery/

Saludos.
  #4 (permalink)  
Antiguo 20/01/2010, 18:08
 
Fecha de Ingreso: agosto-2008
Ubicación: Puebla, Mexico.
Mensajes: 84
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Duda para manejar eventos.

mil gracias srs !....efectivamente no conocia livequery, me han salvado la vida...con esta era la segunda vez que me pasaba y lo habia dejado pasar y buscaba otra alternativa que no fuera ajax, pero gracias a todos por responder.

Etiquetas: eventos, manejar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:32.