La función de envío recursivo de jQuery no envía el formulario

Necesito que se ejecute un código justo después de hacer clic en el botón Enviar y antes de que se haya enviado el formulario. Eliminé el código y dejé solo las partes necesarias para mostrarle el problema. Lo que necesito que haga el código es ingresar a la función de envío, pero en lugar de enviar el formulario, llame a la función nuevamente. El formulario debe enviarse solo en esa segunda iteración. Excepto que no lo hace. El código se ejecuta completamente como debería, pero el formulario no se envía al final.

Le agradecería que alguien me explique por qué.

Aquí está el código (simplr-reg es el nombre del formulario):

<script>

var reallySubmit = false;

$(‘#simplr-reg’).submit(function(event)
{    
   if (false == reallySubmit)
   {
      reallySubmit = true;
      $(‘#simplr-reg’).submit(); 
      event.preventDefault();
      return false; 
   }
   else
   {
      return true;
   }
});

</script>

preguntado el 16 de mayo de 11 a las 20:05

¿Cómo sabes que no fue enviado? -

@Neal, estoy trabajando con un complemento de registro de sitios de WordPress y cuando se envía el formulario, recibo un mensaje de que se envió correctamente. En este caso no lo hago. También reviso la base de datos para ver si se ha agregado un nuevo registro. -

2 Respuestas

$("#simplr-reg").submit(); 

Que dice "llama al submit método en la selección de jQuery ". Tiene un jQuery submit manejador vinculado a la selección. Dado que ha activado el evento en la selección de jQuery, también se activa el controlador jQuery.

Si activa el evento en el objeto de formulario DOM nativo (this dentro del controlador de envío), el controlador jQuery no se activará, por lo que no dará vueltas en círculos. Llama a form.submit método:

this.submit();

contestado el 17 de mayo de 11 a las 00:05

@lonesomeday, gracias. Parece estar funcionando con el código que he mostrado en la pregunta. Pero en mi código completo, la primera función de envío llama a otra función que, al final, debería llamar al segundo envío. Pero no reconoce al operador 'esto' allí. ¿Que puedo hacer? - Ceniza

@Ceniza $('#simplr-reg').get(0).submit(); get recupera el elemento DOM nativo, por lo que puede llamar al nativo submit método en él. - día solitario

@lonesomeday, todavía no se envía. He colocado el guion aquí, y estaría muy agradecido si pudiera echar un vistazo. La otra función, llamada "codeAddress", está en amarillo, pero no es necesario revisarla por completo. solo su final donde llamo al envío de nuevo. - Ceniza

@Ash ¿Obtienes algún error? Parece que debería funcionar, pero no estoy familiarizado con la API que estás usando. - día solitario

@lonesomeday, eliminé la función para incluir solo la llamada a la función de envío. Puedes echar otro vistazo al código. aquí. Pero aún así no se someterá. - Ceniza

¿Cambiarlo de un evento de 'enviar' a un evento de 'hacer clic' y adjuntarlo al botón en lugar de al formulario?

ETA: asegúrese de 'devolver falso' en su caso de no presentación.

$("#simplr-reg-submit").click(function()
{    
      alert("1st iteration");
      $("#simplr-reg").submit();
       return false;
});

contestado el 17 de mayo de 11 a las 02:05

Probablemente sería mejor para él agregar un evento de clic para un botón (cualquier cosa que no se envíe automáticamente) y luego simplemente llamar al evento de envío del formulario una vez que la otra función esté lista. No es necesario que sea "recursivo". jacobangel

Es cierto, pero si todo ya está creado (es decir, formulario autogenerado), haga clic en w / return false es el camino a seguir. - EnfermoHippie

@Brian, gracias por la rápida respuesta. ¿Regresar es suficientemente falso? ¿No debería haber también event.preventDefault (); ? Además, ¿es correcta mi sintaxis si el nombre del formulario es simplr-reg y el nombre del botón es submit-reg: $ ("# simplr-reg.submit-reg"). Click (función (evento)? - Ceniza

Edité mi respuesta arriba. Devolver falso y preventDefault () son esencialmente lo mismo para un botón de envío. Return false suprime el evento click () y preventDefault () suprime el evento submit (). Cambiaría a una ID si es posible, de lo contrario creo que es $ ('[name = "submit-reg"]'), pero póngalo en una consola Firebug para probar el uso con una ID antes. - EnfermoHippie

@Ash @Brian En los controladores de jQuery, return false es equivalente a llamar en e.preventDefault() y e.stopPropagation(). - no.good.at.coding

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.