var links = document.body.querySelectorAll("p.sourcelinks a.individual_source_link");
for(var i=0;i<links.length;i++)
{
links[i].onclick = null;
}
是我当前的代码,但它不会删除onclick事件。我不知道它们会是什么,因为这是一个油脂单脚本。
答案 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
})
这是解决方案 右键单击并选择绕过的事件