2014-11-10 3 views
5

Некоторые сторонние плагины присоединяют eventListener к сайту. Как удалить eventListener, не зная связанную с ним функцию.removeEventListener, не зная функции

Я называю это removeEventListener, но я не могу понять, как удалить это.

Например: getEventListeners(window) показаны события, прилагаемые. Но, когда я пытаюсь удалить событие с использованием window.removeEventListener("eventname"), он не работает, не зная этой функции.

Пожалуйста, помогите, заблаговременно.

ответ

7

getEventListeners(window) вернет карту событий и их зарегистрированных зарегистрированных слушателей.

Итак, для DOMContentLoaded например, у вас может быть много слушателей событий. Если вы знаете, индекс слушателя вы хотите удалить (или, если существует только один), вы можете сделать:

var eventlistener = getEventListeners(window)["DOMContentLoaded"][index]; 
window.removeEventListener("DOMContentLoaded", 
          eventlistener.listener, 
          eventlistener.useCapture); 
+0

Еще более удобно, потому что он также возвращает функцию дерегистрации 'remove':' getEventListeners (window) .DOMContentLoaded [0] .remove() '. – dfsq

+0

@dfsq, 'chrome' да, но не' firefox'. (не может проверить, т. е.). – manji

+0

@manji Спасибо, друг. Он работает в хроме. – Dineshkani

4

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

Ваш единственный вариант, если вы не можете получить эту ссылку, полностью замените это Node.

+0

JANDY есть ли способ, чтобы получить эту ссылку с помощью JQuery или JavaScript. Поскольку это событие добавляется третьей стороной, и это событие присоединяется в элементе окна – Dineshkani

+0

@ Dineshkani AFAIK, нет (но, надеюсь, какой-то ниндзя меня исправит здесь, если я ошибаюсь). Нативные добавленные события через 'addEventListener' не хранятся в любом месте, доступном Javascript. – jAndy

+0

Спасибо за ваш ответ @jAndy – Dineshkani

Смежные вопросы