Используйте инспектор Chrome webkit, чтобы удалить прослушиватель событий

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

введите здесь описание изображения

Есть ли способ быстро отключить прослушиватель событий из инспектора Webkit?

Возможно, вы посмотрите и наберете какой-нибудь код в консоли, чтобы removeEventListener слушатель? Как бы я это сделал? Например, как бы я удалил прослушиватель «щелчка» выше


person Tarang    schedule 13.06.2012    source источник


Ответы (5)


Извините, вам не повезло (по крайней мере, на данный момент). removeEventListener требует точного объекта функции слушателя в качестве аргумента, а DevTools не позволяет вам каким-либо образом получить доступ к функции слушателя.

Если вам определенно нужна эта функция, отправьте сообщение об ошибке на странице http://new.crbug.com (против Chrome) или http://bugs.webkit.org (предпочтительнее, чем WebKit).

person Alexander Pavlov    schedule 15.06.2012
comment
Ответ @ Джексона ниже работает в хроме по состоянию на 2017 год. - person Josiah; 01.09.2017

Вы можете использовать getEventListeners(element).click[index].listener для получения ссылки на прослушиватель (в консоли WebKit).

Итак, чтобы удалить первого слушателя, вы можете сделать:

document.removeEventListener('click', getEventListeners(document).click[0].listener)

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

function removeEventListeners(element, listenerMap) {
    Object.keys(listenerMap).forEach(function (name) {
        var listeners = listenerMap[name];
        listeners.forEach(function (object) {
            element.removeEventListener(name, object.listener);
        });
    });
}

removeEventListeners(document, getEventListeners(document))
person Jackson    schedule 24.08.2015
comment
Это отличный ответ. Обратите внимание, что вам, возможно, придется вызывать его с помощью окна вместо документа. - person Josiah; 01.09.2017

Вы можете удалить прослушиватель событий в консоли javascript. Сначала найдите элемент, к которому прикреплен этот прослушиватель событий. Назовем это эл. Затем вы выполняете: e.onclick=null. Например, многие прослушиватели событий присоединены к «телу», тогда приведенный выше код становится: document.body.onclick=null. После этого прослушиватель событий удаляется.

person Shaohua Li    schedule 06.06.2014
comment
Только что попробовал то, что вы предложили, и это не сработало при создании прослушивателя событий с помощью: document.body.addEventListener('click', function() { console.log('clicked'); }); - person d48; 13.03.2015
comment
Да, ты прав. Мои тесты не охватывают все случаи. Кажется, правильный ответ здесь: stackoverflow.com/questions/4919079/ - person Shaohua Li; 15.03.2015

Может поздно но.

В хроме есть специальная кнопка для удаления вызова метода определенного события.

Щелкните правой кнопкой мыши на входе html (кнопка в моем примере), проверьте элемент, хром откроет вкладку просмотра элементов (в режиме html) с другой панелью, состоящей из вложенных вкладок на этой панели, щелкните вкладку «прослушиватель событий» и разверните событие, которое вы интересует (onclick в моем примере) наведите указатель мыши на имя кнопки, которую вы проверили, и появится кнопка «удалить», и один щелчок прослушивателя событий будет удален для текущей загруженной страницы.

Вуаля

person Akyo    schedule 20.03.2019
comment
а что если эта строка с названием класса слишком длинная? кажется, что это слово «Удалить» слишком далеко, чтобы его увидеть. есть ли какой-нибудь намек на то, как сделать это слово «Удалить» видимым даже для сверхдлинных имен элементов? - person Vadim Anisimov; 16.05.2019

Просто:

getEventListeners(document).click[0].remove()

Это работает и с другими элементами:

getEventListeners($('#submit-button')[0]).click[0].remove()

И другие виды мероприятий:

getEventListeners($('#login-form')[0]).submit[0].remove()
person jordanbtucker    schedule 31.10.2015
comment
Remove не является методом для объекта слушателя. - person Sensei; 04.08.2018