Tengo un problema con .on()
. Tengo múltiples elementos de formulario (formularios con class="remember"
), también agrego otro form.remember
usando AJAX. Entonces, quiero que maneje el evento de envío de algo como:
$('form.remember').on('submit',function(){...})
pero el formulario agregado con AJAX no funciona con él.
¿Dónde está el problema? ¿Es un error?
$(document).on('submit','form.remember',function(){...})
document
con el padre estático más cercano.Respuestas:
Necesitas delegar el evento al nivel del documento.
$('form.remember').on('submit'
funciona igual que,$('form.remember').submit(
pero cuando lo use$(document).on('submit','form.remember'
, también funcionará para el DOM agregado más adelante.fuente
$(document).on
tiene un rendimiento mucho menor que$('form.remember').on('submit'
. Ahora tiene que escuchar todos los eventos de envío en el documento. Es mucho mejor restringir un poco el alcance que escucharon
document
, si es posibleTuve un problema con los mismos síntomas. En mi caso, resultó que a mi función de envío le faltaba la declaración "return".
Por ejemplo:
fuente
return false;
no enviará el formulario. Para enviar el formulario utilicereturn true;
.El problema aquí es que el "on" se aplica a todos los elementos que existen EN EL MOMENTO. Cuando crea un elemento dinámicamente, debe ejecutar de nuevo:
Dado que los formularios suelen tener nombres o ID, también puede adjuntarlos al nuevo formulario. Si estoy creando muchas cosas dinámicas, incluiré una función de configuración o vinculación:
Entonces, cada vez que crea algo (botones generalmente en mi caso), simplemente llamo a bindItems para actualizar todo en la página.
No me gusta usar 'cuerpo' o elementos de documento porque con pestañas y modales tienden a quedarse y hacer cosas que no esperas. Siempre trato de ser lo más específico posible a menos que sea un proyecto simple de 1 página.
fuente