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

[SOLUCIONADO] botón dinámico y ni caso

Estas en el tema de botón dinámico y ni caso en el foro de Frameworks JS en Foros del Web. Hola a todos, estoy haciendo pruebas con el jquery, he creado un formulario de forma dinámica, me muestra un campo para rellenar y un botón, ...
  #1 (permalink)  
Antiguo 28/11/2013, 12:41
Avatar de coloradocanyon  
Fecha de Ingreso: marzo-2009
Ubicación: Reino de Granada
Mensajes: 45
Antigüedad: 15 años, 8 meses
Puntos: 0
botón dinámico y ni caso

Hola a todos, estoy haciendo pruebas con el jquery, he creado un formulario de forma dinámica, me muestra un campo para rellenar y un botón, el único problema es que jquery ni se entera que existe, ¿algún consejo?, ¿como se controla este botón?

un saludo y gracias....
  #2 (permalink)  
Antiguo 28/11/2013, 15:14
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 10 meses
Puntos: 206
Respuesta: botón dinámico y ni caso

Si defines el evento click sobre elementos que no existen cuando cargas la página, nunca funcionará. Una de dos, o defines ese evento cuando ese elemento exista, o usas eventos delegados.
  #3 (permalink)  
Antiguo 29/11/2013, 02:28
Avatar de coloradocanyon  
Fecha de Ingreso: marzo-2009
Ubicación: Reino de Granada
Mensajes: 45
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: botón dinámico y ni caso

te agradezco mucho tu respuesta, no tenía ni idea, ¿puedes explicarlo con un ejemplo?.

un saludo y gracias....
  #4 (permalink)  
Antiguo 29/11/2013, 04:35
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 10 meses
Puntos: 206
Respuesta: botón dinámico y ni caso

http://jsfiddle.net/5aVUE/1/

Código HTML:
Ver original
  1. <div id="directo">
  2.     <h2>Eventos de botones que no existe</h2>
  3.     <button class="add">Añadir boton</button>
  4. </div>
  5. <hr/>
  6. <div id="delegado">
  7.     <h2>Eventos de botones que no existe</h2>
  8.     <button class="add">Añadir boton</button>
  9. </div>

Código Javascript:
Ver original
  1. $(function(){
  2.    
  3.     $(".add").click(function(){ //Boton para añadir botones dinamicamente
  4.         $(this).parent().append('<button class="dinamico">pulsame</button>');
  5.     });
  6.    
  7.     $("#directo .dinamico").click(function(){ //Boton de evento directo.
  8.         //Cuando carga la pagina no existe ningún boton con la clase dinamico en el div directo
  9.         //Asi que no funcionará nunca.
  10.         alert("jamás funcionará");
  11.     });
  12.    
  13.     $("body").on("click","#delegado .dinamico",function(){
  14.         //Cuando carga la página, pone por ejemplo al BODY, que sí existe, a escuchar eventos
  15.         //del tipo CLICK. Cuando captura uno, comprueba si fue disparado por un boton con
  16.         //la clase dinamico metido en el div delegado.
  17.         alert("funciona");
  18.     });
  19. });

El evento delegado funciona porque los eventos javascript se transmiten de un elemento a su padre, y del padre al padre del padre, así hasta llegar al BODY.
Es decir, si haces click en un boton metido en un div A, y el div A está metido directamente en el body, primero se disparará el CLICK del botón. Cuando termine de ejecutar su código, llamará al CLICK del div a, si lo hubiera. Cuando termine, Llamára al CLICK del body.
Eso permite optimizar mucho código repetitivo, y también como es tu caso, capturar eventos de elementos que cuando carga la página, no existen.

Otra alternativa es declarar el CLICK del boton del formulario en la misma función de AJAX donde insertas el formulario en la página.

Última edición por marlanga; 29/11/2013 a las 04:42
  #5 (permalink)  
Antiguo 29/11/2013, 13:20
Avatar de coloradocanyon  
Fecha de Ingreso: marzo-2009
Ubicación: Reino de Granada
Mensajes: 45
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: botón dinámico y ni caso

perfecto.

un saludo y gracias...

Etiquetas: jquery
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 09:44.