Удалить все события onclick для элемента

var links = document.body.querySelectorAll("p.sourcelinks a.individual_source_link");
for(var i=0;i<links.length;i++)
{
    links[i].onclick = null;
}

Мой текущий код, однако он не удаляет события onclick. Я понятия не имею, какими они будут, так как это сценарий гриммонки.


person Steven    schedule 07.02.2011    source источник
comment
Мой текущий код (что), однако он не удаляет события onclick. !!!   -  person    schedule 07.02.2011
comment
Это мой текущий код... я думаю   -  person w35l3y    schedule 12.02.2011


Ответы (5)


Ваш код имеет дело только с событиями, добавленными случаем element.onclick. Как насчет событий, добавленных с помощью addEventListener (для браузеров, совместимых со стандартами) и attachEvent (для IE)?

Вам нужно использовать removeEventListener и detachEvent для удаления событий, а также установить для .onclick значение null. Тогда все ваши базы будут покрыты.

person GordonM    schedule 07.02.2011
comment
Это вопрос Greasemonkey. IE и detachEvent не применяются. - person Brock Adams; 18.04.2013

Эта статья, вероятно, будет полезна:

https://web.archive.org/web/20180823093658/http://www.computerhowtoguy.com/how-to-use-the-jquery-unbind-method-on-all-child-elements/

Одна часть, в частности, представляет собой рекурсивную функцию, которая удаляет все события кликов. Помните, что jQuery удалит события щелчка, ЕСЛИ событие щелчка было создано с помощью jQuery. функция, приведенная в статье, удалит как созданные с помощью jQuery, так и те, которые не были. Данная функция такова:

function RecursiveUnbind($jElement) {
    // remove this element's and all of its children's click events
    $jElement.unbind();
    $jElement.removeAttr('onclick');
    $jElement.children().each(function () {
        RecursiveUnbind($(this));
    });
}

Вы бы вызвали функцию следующим образом:

RecursiveUnbind($('#container'));

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

Хотя это относится только к событиям щелчка, вы можете легко изменить его, чтобы обрабатывать другие или все.

person Lucavai    schedule 24.10.2012
comment
Ваша ссылка мертва. Я не мог понять, будет ли добавленный вами код RecursiveUnbind удалять элементы JQuery и NonJQuery или только элементы JQuery. Если нет, можете ли вы добавить код, который удаляет как JQuery, так и NonJQuery? - person user; 08.05.2021

Этот код не работает из-за песочницы GM. links находится в XPCNativeWrapper.

Чтобы обойти это, используйте setAttribute(), например:

var links = document.body.querySelectorAll("p.sourcelinks a.individual_source_link");
for(var i=0;i<links.length;i++)
{
    links[i].setAttribute ("onclick", null);
}


Обратите внимание, что обработчики кликов, настроенные другими способами, необходимо очищать другими способами (например, removeEventListener()).

person Brock Adams    schedule 07.02.2011

Я предполагаю, что у вас есть функция href или функция JavaScript, вызываемая для onClick для ссылки <a>.

Вы можете удалить любой из них, удалив тег href, событие onClick или, в данном случае, их оба.

    for(var i=0;i<links.length;i++)
    {

        links[i].href='#';
        links[i].onclick = '';
    }
person codingbadger    schedule 07.02.2011
comment
Не работает для tv.blinkx.com/show /пенн-теллер-чушь собачья/ - person Steven; 07.02.2011
comment
@Стивен - что пытаетесь отключить? Элементы на этой странице не соответствуют критериям в вашем вопросе. - person codingbadger; 07.02.2011

Array.from(document.all).forEach(el=>{
el.onselectstart=null
el.oncontextmenu=null
document.oncontextmenu=null
})

вот решение Щелкните правой кнопкой мыши и выберите обойденное событие

person 1nj3c70R    schedule 20.02.2021