Заказ обработчика событий 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