Устранение неполадок слушателя события в простом помощнике делегирования события - PullRequest
0 голосов
/ 07 мая 2019

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

export const delegate = (function() {
  const events = {};
  return ({
    base = 'document',
    selector,
    type,
    callback,
    listenerName,
    remove = false,
    useCapture = false
  }) => {
    events[listenerName] = function(e) {
      for (
        let target = e.target;
        target && target !== this;
        target = target.parentNode
      ) {
        if (target.matches(selector)) {
          callback.call(target, e);
          break;
        }
      }
    };
    if (remove) {
      window[base].removeEventListener(type, events[listenerName], useCapture);
      delete events[listenerName];
      return;
    }
    window[base].addEventListener(type, events[listenerName], useCapture);
  };
})();

Вызывается так:

delegate({...configWithRemoveNotSet})

Я также создал временного помощника для проверки возможности удаления ранее добавленного прослушивателя событий, передавая все те же значения, что и я, чтобы добавить прослушиватель, но переключив логическое значение remove на true.

window.testRemoveListener = () => delegate({...sameConfigWithRemoveSetToTrue});

Я могу убедиться, что функция прослушивателя правильно удалена из объекта events, и что removeEventListener также был вызван.

Я ожидал, что моя тестовая функция удалит ранее добавленный прослушиватель событий. Но слушатель продолжает стрелять.

Спасибо за любые идеи о том, что я делаю здесь неправильно.

...