Задержка обработчика события до завершения другой функции - PullRequest
0 голосов
/ 15 ноября 2018

Недавно мы внедрили стороннее решение на наш веб-сайт, для которого я не могу напрямую обновить код, но я могу добавить свой собственный javascript для управления им.Это решение имеет кнопку, которая запускает запрос AJAX.Я хотел бы запустить собственный пользовательский код до того, как будет отправлен AJAX-запрос, и отправлять его только в том случае, если мой код позволяет.

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

Надеюсь, это понятно ...

РЕДАКТИРОВАТЬ: обработчик щелчка добавляетсяСторонние решения вроде как, довольно стандартно на самом деле.Однако я не могу напрямую получить доступ к используемому контроллеру, поэтому я не могу просто скопировать функцию.Кроме того, поставщик услуг иногда обновляет свой код, поэтому, если я скопирую его, он не будет обновляться при обновлении своего кода.

enter image description here

1 Ответ

0 голосов
/ 15 ноября 2018

В этом решении есть кнопка, которая запускает запрос AJAX. Я хотел бы запустить собственный код до того, как будет отправлен AJAX-запрос, и отправлять его только в том случае, если мой код это позволяет.

Без погружения во внутренние механизмы управления обработчиками событий jQuery (которые могут измениться в любое время), вероятно, самое простое - скрыть кнопку и заменить ее своей собственной, а затем активировать кнопку, когда это необходимо. Смотрите комментарии:

// === The original handler
$("#the-btn").on("click", function() {
  console.log("Original handler ran");
});

// === Your code
// Get and hide the original button
var btn = $("#the-btn");
btn.hide();
// Create and add replacement
var newBtn = $("<input type=button>"); newBtn.val(btn.val());
newBtn.on("click", function() {
  console.log("Your handler starting (I'm assuming an async process)...");
  setTimeout(function() {
    console.log("Your handler is done, triggering original");
    btn.click();
  }, 800);
});
newBtn.insertBefore(btn);
<input type="button" id="the-btn" value="Do Something">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...