¿Cómo puedo capturar y relanzar correctamente el evento de envío de formularios, garantizado?

Probablemente no sea su habitual "¿Cómo capturo eventos de envío de formularios?" pregunta.

estoy tratando de entenderprecisamente cómo jQuery, el Javascript de vainilla y el navegador (IE / FF / Chrome / Safari / Opera) manejan los eventos de envío de formularios, y las relaciones entre ellos. (Ver mi otra pregunta.Después de horas de buscar en Google y experimentar, todavía no puedo llegar a una conclusión, ya sea por discordancia o vaguedad.

Estoy terminando un script que se integra con los formularios del sitio web para que los formularios no puedan enviarse hasta que vuelva la solicitud de AJAX.

Idealmente:

El usuario rellena el formularioSe envía el formulario, pero no se llama a los controladores de eventos enlazados anteriormente, excepto el míoMi manejador realiza una solicitud de API (asincrónicamente, por supuesto)El usuario confirma los resultados de la validación de la respuesta de la APIEl envío del formulario continúa normalmente, automáticamente, invocando los otros manejadores que antes fueron suprimidos

Mi entendimiento actual es que: (Esto puede estar mal, por favor corríjame si es así)

jQuery enlaza el formulario enviar controladores de eventos al botón enviarclick eventosControladores de eventos directamente en el elemento de envíoclick eventos (ya sea en el marcado comoonclick="" o enlazado usando jQuery) se ejecutan primeroManejadores de eventos en el formulario.submit eventos (ya sea en el marcado comoonsubmit="" o enlazado utilizando jQuery) se ejecutan a continuaciónVocación$('[type=submit]').click() no invoca el formulariosubmit evento, por lo que sus manejadores no son llamadosVocación$('form').submit() no invoca el boton de enviarclick evento, por lo que sus manejadores no son llamadosSin embargo, de alguna manera, un usuario que hace clic en el botón enviar termina invocando controladores vinculados al formulariosubmit evento ... (pero como se mencionó anteriormente, invocar clic en el botón enviar no hace lo mismo)De hecho,alguna la forma en que el usuario envía el formulario (mediante el botón de envío o presionando Entrar), los controladores vinculados con jQuery al formulariosubmit evento se llaman ...

En este momento, yo soy:

Controladores no vinculantes enlazados con jQuery al botón de envíoclick Evento conservando una referencia a ellos.Encuadernar mi propio controlador al botón de envíoclick evento, por lo que se ejecuta primeroTomando cualquier manejador vinculado en el marcado usandoonclick="" yonsubmit="" (en sus elementos respectivos) y reencuadernándolos usando jQuery (para que se ejecuten después de los míos), luego configurando los atributos paranullRe-enlazando sus manejadores (del paso 1) para que ejecuten el último

En realidad, esto ha sido notablemente efectivo en mis propias pruebas, por lo que mi controlador de eventos se activa primero (esencial).

El problema, y ​​mis preguntas:

Mi manejador dispara primero, como se esperaba (hasta ahora). El problema es que mi controlador es asíncrono, así que tengo que suprimir (preventDefault / stopPropagation / etc) el formulariosubmit o botón de enviarclick evento que lo invocó ... hasta que se realiza la solicitud de la API. Luego, cuando vuelve la solicitud de la API y todo está en A-OK, necesito volver a invocar el formulario enviado automáticamente. Pero debido a mis observaciones anteriores, ¿cómo me asegurotodos Los manejadores de eventos son despedidos como si fuera una forma natural de enviar?

¿Cuál es la forma más limpia de agarrar todos sus manejadores de eventos, poner primero el mío y luego volver a invocar el formulario enviado para que todo se llame en su orden correcto?

Y cuál es la diferencia, si la hay, entre$('form').submit() y$('form')[0].submit()? (Y lo mismo para$('[type=submit]').click() y$('[type=submit]')[0].click())

tl; dr, ¿Qué es la documentación canónica, clara, de talla única para todos sobre Javascript / jQuery / browser form-submit-event-handling? (No estoy buscando recomendaciones de libros.)

Algunas explicaciones: estoy tratando de compensar una gran cantidad de Javascript en las páginas de pago del carrito de la compra, donde a veces el formulario se envía solo cuando el usuario HACE CLIC EN EL BOTÓN (no es un botón de envío) en la parte inferior de la página, o hay Otros escenarios difíciles. Hasta ahora, ha sido bastante exitoso, solo es volver a invocar el envío que realmente es el problema.