JQuery найти статус зарегистрированных событий - PullRequest
0 голосов
/ 06 декабря 2018

Я читал решение вопроса о поиске зарегистрированных обработчиков событий на объекте, и это почти решило мою проблему.

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

РЕДАКТИРОВАТЬ: "рабочий" код для получения зарегистрированных событий:

$._data( document.body, "events" )["customEventName"]

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

1 Ответ

0 голосов
/ 06 декабря 2018

Если они существуют, события все еще прослушиваются.Что касается упомянутого вами состояния, я сомневаюсь, что вы можете получить от них что-либо значимое.

В зависимости от того, какой у вас сценарий использования, вы можете перегрузить обработчик (и), чтобы перехватить их.


Пример перегрузки всех прослушивателей событий для определенного элемента:

var $btn = $('button').on('click mouseenter',function(e) {
  console.log('Original event handler')
});

var buttonEvents = $._data($btn[0], 'events');

Object.keys(buttonEvents).forEach(function(k) {
  buttonEvents[k].forEach(function(o) {
    var oldHandler = o.handler;
    o.handler = function(e) {
      console.log('Event Type: ', e.type, ' new handler');
      if(arguments[1]){
         console.log('Event Data:: ', arguments[1]);
      }
      oldHandler.apply(this, arguments);
    };
  });
});

$btn.trigger('click', ['Triggered click'])
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button>
click me
</button>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...