Заказ обработчика событий Javascript
У меня есть поле ввода, которое связано с ним двумя обработчиками событий.
Подтвердить и автосохранение
Очевидно, я хочу проверить, прежде чем я сохраню. Если проверка не выполняется, к вводу добавляется класс "недействительный", и автосохранение проверяет этот класс до его продолжения.
Это работает достаточно хорошо, но есть ли способ гарантировать выполнение проверки перед автосохранением во всех случаях?
Ответы
Ответ 1
Если вы используете JQuery для привязки ваших событий, это гарантирует, что обработчики будут запущены в том же порядке, в котором они были связаны. В противном случае заказ официально undefined.
Если вы не можете использовать JQuery или подобную структуру, вы можете легко имитировать это, используя собственную собственную привязку, где ваш общий обработчик - это функция, которая хранит массив функций и вызывает их в порядке.
Ответ 2
Как правило, у вас должен быть вызванный обработчик события "Проверка" (), который возвращает true, если все в порядке и готово к сохранению.
function onSaved() {
if (!validate()) {
// set class
return;
}
// do the save
}
Ответ 3
Почему бы не присоединить только один обработчик - Validate
- и вызвать AutoSave
изнутри?
Для ответа на ваш вопрос, который не является также вопросом, см. этот пост или этот или этот.
Ответ 4
Уже ответил - но просто для добавления этого знания, на порядок обработчиков событий нельзя полагаться. Он может в любой заданной реализации быть предсказуемым, но это может измениться с одной (Javascript) реализации на следующую и/или с течением времени. Единственное, что важно, это то, что все они будут выполнены, но не в каком порядке.
Обратите внимание, что ситуация аналогична ситуации, когда для объекта DOM есть обработчик событий, а другой для одного и того же события для дочернего или родительского - кто из них выполняется первым, также не всегда ясен. См. http://www.quirksmode.org/js/events_order.html