Как я могу продолжить запуск событий после использования stopImmediatePropagation () в jQuery? - PullRequest
1 голос
/ 06 января 2020

Я использую css классы для запуска событий / функций.

<button class="func_check_data func_proceed">

Кнопка вызывает различные функции для события щелчка.

func_check_data() проверяет действительные данные и сохраняет все в порядке.

Поэтому, когда функция func_check_data() выдает ошибку, func_proceed() не должен запускаться.

Используя event.stopImmediatePropagation() в func_check_data, я получаю эту работу.

Но, когда func_check_data не выдает ошибку, func_proceed срабатывает, прежде чем func_check_data успешно сохранит данные с помощью ajax.

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

Ответы [ 2 ]

1 голос
/ 06 января 2020

Нет. Вам нужно иметь один обработчик событий, который выполняет эту координацию, а не несколько несогласованных обработчиков событий.

Например:

  • .func_check_data, которые также не .func_proceed элементы могут вызывать обработчик функции проверки данных.
  • Аналогично, .func_proceed, которые также не являются элементами .func_check_data, могут вызывать обработчик функции продолжения.
  • .func_check_data.func_proceed элементы (например, и те, и другие) будут использовать третий обработчик, который выполняет проверку данных и сохраняет ajax, а затем, когда сохранение ajax завершено, выполняет часть продолжения.
0 голосов
/ 06 января 2020

Типичным способом обработки этого вида логики цепочки c является либо:

  • a switch, либо блок if/else, который направляет поток от одной функции к другой, вручную вызывая другую функцию, или
  • и ajax request / response, где ответ запускает следующую функцию

, например,

function follow_up(data) { /* do stuff */ }
function cancel(data) { /* undo stuff */ }
function clickHandler(e) {
  let url = 'foo';
  let data = {bar: 'baz'};
  $.ajax({
    url: url, data: data, method: 'POST',
    success: follow_up,  // see funcs above
    error: cancel,       // see funcs above
  });
}

Также имейте в виду, что вы можете вручную запускать определенные c события с помощью $.trigger('eventName').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...