http://jsfiddle.net/5aVUE/1/
Código HTML:
Ver original <h2>Eventos de botones que no existe
</h2> <h2>Eventos de botones que no existe
</h2>
Código Javascript
:
Ver original$(function(){
$(".add").click(function(){ //Boton para añadir botones dinamicamente
$(this).parent().append('<button class="dinamico">pulsame</button>');
});
$("#directo .dinamico").click(function(){ //Boton de evento directo.
//Cuando carga la pagina no existe ningún boton con la clase dinamico en el div directo
//Asi que no funcionará nunca.
alert("jamás funcionará");
});
$("body").on("click","#delegado .dinamico",function(){
//Cuando carga la página, pone por ejemplo al BODY, que sí existe, a escuchar eventos
//del tipo CLICK. Cuando captura uno, comprueba si fue disparado por un boton con
//la clase dinamico metido en el div delegado.
alert("funciona");
});
});
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.