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

Вероятно, это не обычное "Как мне записать события отправки формы?" вопрос.

Я пытаюсь понятьточно как события отправки формы обрабатываются 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() не вызывает кнопку отправки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)

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