В общем смысле обработчики событий будут вызываться в том порядке, в котором они были связаны, но только если они связаны на одном уровне.В вашем случае вы связываете одно непосредственно с формой, в то время как другое является делегированным обработчиком, связанным на уровне document.body
.Сначала будет происходить прямое связывание, а затем событие всплывает, чтобы быть обработанным другим.
Если вы связываете оба обработчика на одном уровне с .delegate()
, тогда они должны вызываться по порядку:
$(document.body).delegate('form', 'submit', methods.checkForm);
$(document.body).delegate('form', 'submit',
methods.submitFormIfCheckedFormIsTrue);
Затем в первом (универсальном) обработчике вы должны вызвать метод event.stopImmediatePropagation()
, чтобы предотвратить вызов других обработчиков (отметив, что простой возврат false предотвращает использование значения по умолчанию и останавливает дальнейшее всплытие события), но это не останавливает выполнение других обработчиков на этом уровне):
methods.checkForm = function (e) {
if (!$(this).isVerified()) {
e.stopImmediatePropagation();
return false;
}
return true;
};
(Кстати, код, показанный в вопросе, исключил событие (второй параметр) из вызова .delegate()
- Я вставил это в свой код.)
Или связать оба обработчика напрямую, вместо использования .delegate()
.Говоря об использовании .delegate()
, если вы используете последнюю версию jQuery, вы можете переключиться на использование .on()
, нового метода привязки событий для всего.
"Чтослучается, функция submitFormIfCheckedFormIsTrue запускается до или во время функции checkForm "
Определенно до, а не во время.(Практически во всех браузерах) JavaScript работает в одном потоке, поэтому у вас никогда не будет одновременно работать две функции.