Как я могу правильно захватить и повторно запустить событие отправки формы, гарантировано?

Это, наверное, не твой обычныйКак мне записать события отправки формы? " question.I»

я пытаюсь понятьточно как события отправки формы обрабатываются jQuery, vanilla Javascript и браузером (IE / FF / Chrome / Safari / Opera) - и отношения между ними. (Смотрите мой другой вопрос.После долгих часов поисков и поисков я все еще не могу прийти к выводу ни из-за разногласий, ни из-за неопределенности.

Я заканчиваю сценарий, который интегрируется с веб-формами, чтобы формы моглине может быть отправлен до тех пор, пока не вернется AJAX-запрос.

В идеале:

Пользователь заполняет формуФорма отправлена - но никакие ранее связанные обработчики событий не вызываются, кроме моихМой обработчик делает запрос API (конечно, асинхронно)Пользователь подтверждает результаты проверки из ответа APIОтправка формы продолжается нормально, автоматически, вызывая другие обработчики, которые раньше были подавлены

Мое текущее понимание таково: (это может быть неправильно, пожалуйста, исправьте меня, если так)

jQuery привязывает обработчики событий отправки формы к кнопке отправкиclick СобытияОбработчики событий непосредственно в элементе submitclick события (будь то в разметке, какonclick="" или связаны с использованием jQuery) выполняются в первую очередьОбработчики событий в формеsubmit события (будь то в разметке, какonsubmit="" или связаны с использованием jQuery) выполняются затемпризвание$('[type=submit]').click() Безразлично»т вызывает формуsubmit событие, поэтому его обработчики неТебя называютпризвание$('form').submit() Безразлично»T вызвать кнопку отправкиclick событие, поэтому его обработчики неТебя называютТем не менее, каким-то образом пользователь, который нажимает кнопку отправки, в конечном итоге вызывает обработчики, связанные с формойsubmit событие ... (но, как упоминалось выше, при нажатии кнопки «Отправить»сделать то же самое)По факту,любой способ, которым пользователь отправляет форму (с помощью кнопки отправки или нажатия Enter), обработчики связываются с формой jQuerysubmit событие называется ...

Прямо сейчас я:

Отмена привязки обработчиков, связанных с jQuery, к кнопкам отправкиclick событие при сохранении ссылки на нихПривязка моего собственного обработчика к кнопке отправкиclick событие, поэтому оно выполняется первымВзятие любых обработчиков, связанных в разметке, используяonclick="" а такжеonsubmit="" (на их соответствующих элементах) и повторно связать их, используя jQuery (чтобы они выполнялись после моего), затем установите атрибуты вnullПовторная привязка их обработчиков (из шага 1), чтобы они выполнялись последними

На самом деле, это было замечательно эффективно в моем собственном тестировании, так что мой обработчик событий запускается первым (обязательно).

Проблема и мои вопросы:

Мой обработчик срабатывает первым, как и ожидалось (пока). Проблема в том, что мой обработчик асинхронный, поэтому я должен подавить (предотвратить дефолт / stopPropagation / etc) формуsubmit или отправить кнопкуclick событие, которое вызвало его ... пока не будет выполнен запрос API. Затем, когда запрос API возвращается, и все в порядке, мне нужно повторно вызвать отправку формы автоматически. Но из-за моих наблюдений выше, как мне убедиться,все обработчики событий запускаются так, как если бы это была естественная форма отправки?

Каков самый чистый способ получить все их обработчики событий, сначала поставить мой, а затем повторно вызвать форму отправки, чтобы все вызывалось в правильном порядке?

И что'Разница, если таковая имеется, между$('form').submit() а также$('form')[0].submit()? (И то же самое для$('[type=submit]').click() а также )$('[type=submit]')[0].click()

ТЛ; дрЧто такое каноническая, понятная и универсальная документация по обработке Javascript / jQuery / браузера формы-отправки-события? (Я'Я не ищу книжных рекомендаций.)

Некоторое объяснение: яЯ пытаюсь компенсировать большую часть Javascript на страницах оформления корзины покупок, где иногда форма отправляется только тогда, когда пользователь нажимает КНОПКУ (не кнопку отправки) внизу страницы, или существуют другие сложные сценарии. Пока чтоэто было довольно успешно, этопросто повторно вызвать утверждение, чтоЭто действительно проблема.

Ответы на вопрос(4)

Ваш ответ на вопрос