删除元素的所有onclick事件

时间:2011-02-07 07:54:40

标签: javascript greasemonkey

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

是我当前的代码,但它不会删除onclick事件。我不知道它们会是什么,因为这是一个油脂单脚本。

5 个答案:

答案 0 :(得分:6)

您的代码仅处理element.onclick案例添加的事件。使用addEventListener(适用于标准的浏览器)和attachEvent(适用于IE)添加的事件如何?

您需要使用removeEventListener和detachEvent删除事件以及将.onclick设置为null。然后你的所有基地都将被覆盖。

答案 1 :(得分:5)

这篇文章可能会有用:

http://www.computerhowtoguy.com/how-to-use-the-jquery-unbind-method-on-all-child-elements/

特别是一部分是一个删除所有点击事件的递归函数。请记住,如果使用jQuery创建click事件,jQuery将删除click事件。本文中给出的函数将删除使用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对象参数,但您可以轻松地将其更改为传递字符串作为元素ID的名称,或者您认为最好。

虽然这只会解决点击事件,但您可以轻松修改它以处理其他人或所有事件。

答案 2 :(得分:1)

该代码不起作用because of GM's sandbox. links is in an 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())。

答案 3 :(得分:0)

我猜您在href链接onClick上调用了<a>或JavaScript函数。

您可以删除href标记,onClick事件或同时删除这两个标记,从而删除其中任何一个。

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

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

答案 4 :(得分:0)

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

这是解决方案 右键单击并选择绕过的事件