jQuery animar en bucle infinito
Frecuentes
Visto 605 equipos
1
Estoy tratando de hacer que esto suceda:
evitar que un botón de envío envíe el formulario
desvanecer un elemento
luego enviando el formulario
¡Pero estoy atascado con un bucle infinito de animación! ¿¿Por qué??
HTML
<form id="postitron" method="post" action="/es/postitron/answertron.php">
<input type="hidden" name="acces" value"yes">
<input id="submit" type="submit" value="DOIT">
</form>
JavaScript
$('#postitron').submit(function(e){
e.preventDefault();
$('#page').animate({opacity:0},400, function(){
$('#postitron').submit();
});
});
PD- También he probado el .one()
método en lugar de .submit()
, pero evita que el método de envío se ejecute en #postitron una vez que se completa la animación :(
3 Respuestas
0
Es porque está vinculando su evento en SUBMIT
, Y su .animate callback function
is SUBMIT
'ing la forma... causando el bucle infinito.
Pruebe lo siguiente:
En lugar de evento vinculante .submit
on form
enlazar .click
evento en submit
del botón.
$('#submit').click(function(e){
e.preventDefault();
$('#page').animate({opacity:0},400, function(){
$('#postitron').submit();
});
});
Tenga en cuenta que no probé esto.
contestado el 23 de mayo de 12 a las 07:05
0
submit()
llama a su límite personalizado submit
función, que a su vez llama a su submit
de nuevo, etc.
Intenta usar el envío de DOM:
$('#postitron')[0].submit()
contestado el 23 de mayo de 12 a las 07:05
ah.. logico. ahora la animación se completa, pero el formulario no se publica (debería ser 404 en mi prueba). ¿Alguna idea? - tecno campesino
hhm, ¿cómo sabes que no se está enviando? ¿Consola? - Andreas Wang
Sí señor: TypeError no detectado: propiedad 'enviar' del objeto # no es una función - tecno campesino
@technopeasant la bola de cristal me dice que tienes, en algún lugar de tu forma, un elemento de forma con name="submit"
, ahora lo haces? - Andreas Wang
no señor, estoy usando el código anterior. Tengo un elemento cuya identificación y tipo están configurados para enviar: tecno campesino
0
Puede predefinir la función y, dentro de ella, desvincular para enviar y luego volver a enviar. Es un truco, pero puede funcionar.
O tal vez verifique que esté oculto y luego vuelva a enviarlo así:
var hidden = false;
$('#postitron').submit(function(e){
if ( !hidden ) {
e.preventDefault();
$('#page').animate({opacity:0},400, function(){
hidden = true;
$('#postitron').submit();
});
}
});
contestado el 23 de mayo de 12 a las 07:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas jquery forms animation loops or haz tu propia pregunta.
Si golpeas
<enter>
dentro de un cuadro de entrada en el formulario, el formulario se enviaría sin la animación. - robertoBuen pensamiento, pero está devolviendo un error en la consola: TypeError no detectado: propiedad 'enviar' del objeto # no es una función - tecno campesino
Editado para notar que el clic está en el botón de enviar, no en el formulario. - roberto