Jak mogę zagwarantować prawidłowe przechwytywanie i ponowne uruchamianie zdarzenia przesyłania formularza?

Prawdopodobnie nie jest to zwykłe „Jak przechwytywać zdarzenia przesyłania formularzy?” pytanie.

próbuję zrozumiećdokładnie w jaki sposób zdarzenia przesyłania formularzy są obsługiwane przez jQuery, waniliowy Javascript i przeglądarkę (IE / FF / Chrome / Safari / Opera) - oraz relacje między nimi. (Zobacz moje inne pytanie.) Po godzinach Googlingu i eksperymentowania nadal nie mogę dojść do konkluzji, ani z powodu niezgody, ani niejasności.

Kończę skrypt, który integruje się z formularzami witryny, aby formularze nie mogły być przesyłane, dopóki nie pojawi się żądanie AJAX.

Idealnie:

Użytkownik wypełnia formularzFormularz jest przesyłany - ale nie są wywoływane żadne wcześniej powiązane funkcje obsługi zdarzeń, z wyjątkiem moichMój program obsługi wysyła żądanie API (oczywiście asynchronicznie)Użytkownik potwierdza wyniki walidacji z odpowiedzi APIPrzesłanie formularza trwa normalnie, automatycznie, przywołując inne programy obsługi, które wcześniej zostały zlikwidowane

Moje obecne zrozumienie jest następujące: (mogą być nieprawidłowe, popraw mnie, jeśli tak)

jQuery wiąże formularz przesyła programy obsługi zdarzeń do przycisku przesyłaniaclick wydarzeniaProcedury obsługi zdarzeń bezpośrednio na elemencie przesyłaniaclick wydarzenia (czy w znaczniku jakonclick="" lub związane za pomocą jQuery) są wykonywane jako pierwszeObsługa zdarzeń w formularzusubmit wydarzenia (czy w znaczniku jakonsubmit="" lub związane za pomocą jQuery) są wykonywane dalejPowołanie$('[type=submit]').click() nie wywołuje formularzasubmit wydarzenie, więc jego obsługa nie zostanie wywołanaPowołanie$('form').submit() nie wywołuje przycisku przesyłaniaclick wydarzenie, więc jego obsługa nie zostanie wywołanaJednak w jakiś sposób użytkownik, który kliknie przycisk Wyślij, kończy wywoływanie programów obsługi powiązanych z formularzemsubmit wydarzenie ... (ale jak wspomniano powyżej, wywołanie kliknięcia przycisku Wyślij nie robi tego samego)W rzeczywistości,każdy sposób, w jaki użytkownik przesyła formularz (za pomocą przycisku Wyślij lub naciskając Enter), programy obsługi powiązane z jQuery do formularzasubmit wydarzenie nazywa się ...

W tej chwili jestem:

Odłączanie programów obsługi powiązanych z jQuery do przycisku przesyłaniaclick zdarzenie przy zachowaniu odniesienia do nichPowiązanie mojego własnego programu obsługi z przyciskiem przesyłaniaclick zdarzenie, więc wykonuje się najpierwZabieranie dowolnych handlarzy związanych przy użyciu znacznikówonclick="" ionsubmit="" (na ich odpowiednich elementach) i ponownie wiążąc je za pomocą jQuery (więc wykonują po moim), a następnie ustawiają atrybuty nanullPonowne wiązanie ich programów obsługi (od kroku 1), aby wykonali ostatni

Właściwie to było niezwykle skuteczne w moich własnych testach, więc mój program obsługi zdarzeń odpalił pierwszy (niezbędny).

Problem i moje pytania:

Mój przewodnik wystrzeliwuje pierwszy, zgodnie z oczekiwaniami (do tej pory). Problem polega na tym, że mój program obsługi jest asynchroniczny, więc muszę wyłączyć (preventDefault / stopPropagation / etc) formularzsubmit lub przycisk Wyślijclick zdarzenie, które go wywołało ... aż do zakończenia żądania API. Następnie, gdy żądanie API wróci i wszystko będzie OK, muszę ponownie wysłać formularz automatycznie. Ale z powodu moich obserwacji powyżej, jak mogę się upewnićwszystko osoby zajmujące się zdarzeniami są wyrzucane tak, jakby to była naturalna forma?

Jaki jest najczystszy sposób na złapanie wszystkich swoich programów obsługi zdarzeń, umieszczenie mojego pierwszego, a następnie ponowne wywołanie formularza?

A jaka jest różnica, jeśli w ogóle, między$('form').submit() i$('form')[0].submit()? (I to samo dla$('[type=submit]').click() i$('[type=submit]')[0].click())

tl; dr, Jaka jest kanoniczna, jasna, uniwersalna dokumentacja dotycząca obsługi JavaScript / jQuery / przeglądarki formularza-zgłoszenia-zdarzenia? (Nie szukam rekomendacji książki.)

Kilka wyjaśnień: staram się zrekompensować dużą liczbę skryptów JavaScript w koszykach na zakupy, gdzie czasami formularz jest przesyłany tylko wtedy, gdy użytkownik KLIKUJE PRZYCISKIEM (nie jest to przycisk przesyłania) na dole strony, lub są inne trudne scenariusze. Do tej pory było to dość udane, po prostu ponownie wywołuje się zgłoszenie, które naprawdę stanowi problem.

questionAnswers(4)

yourAnswerToTheQuestion