Tengo un formulario que, cuando se envía, necesito realizar un procesamiento adicional antes de que deba enviar el formulario. Puedo evitar el comportamiento predeterminado de envío de formularios, luego realizar mi procesamiento adicional (básicamente es llamar a la API de Google Maps y agregar algunos campos ocultos al formulario), y luego necesito el formulario para enviar.
¿Hay alguna forma de "evitar el valor predeterminado" y, en algún momento, "continuar predeterminado"?
javascript
jquery
StackOverflowNewbie
fuente
fuente
Respuestas:
Utilizar
jQuery.one()
El uso de
one
prevenir también un bucle infinito porque estesubmit
evento personalizado se separa después del primer envío.fuente
Cuando unes el
.submit()
evento al formulario y hace las cosas que desea hacer antes de regresar (verdadero), estas cosas suceden antes del envío real.Por ejemplo:
Ejemplo simple
Otro ejemplo en jquery.com: http://api.jquery.com/submit/#entry-examples
fuente
Yo solo haría:
Llame
preventDefault
al principio y use lasubmit()
función más tarde, si solo necesita enviar el formulariofuente
De esta manera, hará un bucle sin fin en su JS. para hacerlo de una mejor manera, puede utilizar lo siguiente
¡Espero que ayude! ¡Gracias!
fuente
Esta es, en mi humilde opinión, la solución más genérica y robusta (si sus acciones son activadas por el usuario, por ejemplo, 'el usuario hace clic en un botón'):
Como ejemplo, observe esta elegante solución para agregar "¿Está seguro?" emergente a cualquier botón simplemente decorando un botón con un atributo. Continuaremos condicionalmente el comportamiento predeterminado si el usuario no se excluye.
1. Agreguemos un texto de advertencia a cada botón que deseemos con un mensaje emergente de "¿estás seguro?"
2. Adjunte controladores a TODOS esos botones:
Eso es.
fuente
fuente
Con
jQuery
una pequeña variación de la respuesta de @Joepreludian anterior:Puntos importantes a tener en cuenta:
.one(...)
En vez de.on(...) or .submit(...)
named
función en lugar de,anonymous function
ya que la referiremos dentro decallback
.Puede cambiar el valor de la
allIsWell
variable en el siguiente fragmentotrue
ofalse
probar la funcionalidad:Buena suerte...
fuente
De forma pura con Javascript, puede enviar el formulario después de evitar el incumplimiento.
Esto se debe a que
HTMLFormElement.submit()
nunca llama alonSubmit()
. Por lo tanto, confiamos en esa rareza de la especificación para enviar el formulario como si no tuviera un controlador onsubmit personalizado aquí.Vea este violín para una solicitud sincrónica.
Esperar a que finalice una solicitud asincrónica es igual de fácil:
Puede consultar mi violín para ver un ejemplo de una solicitud asincrónica.
Y si estás deprimido con promesas:
Y aquí está esa solicitud .
fuente
Puedes usar
e.preventDefault()
que detendrá la operación actual.de lo que puedes hacer
$("#form").submit();
fuente
"Inyección de validación sin bucle de envío":
Solo quiero verificar reCaptcha y algunas otras cosas antes de la validación de HTML5, así que hice algo así (la función de validación devuelve verdadero o falso):
fuente