Удалить все события onclick для элемента - PullRequest
3 голосов
/ 07 февраля 2011
var links = document.body.querySelectorAll("p.sourcelinks a.individual_source_link");
for(var i=0;i<links.length;i++)
{
    links[i].onclick = null;
}

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

Ответы [ 4 ]

6 голосов
/ 07 февраля 2011

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

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

5 голосов
/ 25 октября 2012

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

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, но вы можете легко изменить его так, чтобы он передавал строку в качестве имени идентификатора элемента или как вам лучше.

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

1 голос
/ 07 февраля 2011

Этот код не работает из-за песочницы 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()).

0 голосов
/ 07 февраля 2011

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

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

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

        links[i].href='#';
        links[i].onclick = '';
    }
...