Как удалить слушателя события?

Рейтинг: 0Ответов: 1Опубликовано: 29.03.2023

Я вешаю слушателя события таким кодом:

import myFunction from '@/functions/myFunction'

document.addEventListener( 'click', (event) => { 
    myFunction(event, this.$el)
});

потому что мне в функции нужно передать само событие (event) и еще this.$el

Как я могу удалить этого слушателя? Пробовал так (не помогло):

document.removeEventListener('click', myFunction);

Ответы

▲ 0

Вопрос на самом деле в том, что именно вам нужно.

Если вы хотите не вызывать свою функцию при клике в зависимости от условия, то можете сделать это как то так:

import myFunction from '@/functions/myFunction';

let clickHandlerEnabled = true;

document.addEventListener('click', (event) => {
  if (clickHandlerEnabled) {
    myFunction(event, this.$el);
  }
});

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

В вашем случае это анонимная функция, ссылка на которую нигде не сохранена.

Для достижения нужного вам поведения, вы можете сделать так:

function myFunction(event, el) {
    console.log(this, event, el);
}

function handler(event) {
    myFunction.call(this, event, 'el');
}

document.addEventListener('click', handler);
document.removeEventListener('click', handler);


Note

Просто на заметку, в приведенном вами коде:


import myFunction from '@/functions/myFunction'

document.addEventListener('click', (event) => { 
  myFunction(event, this.$el);
});

В this скорее всего не будет поля $el, т. к. вы используете стрелочную функцию.