2011-02-07 121 views
3
var links = document.body.querySelectorAll("p.sourcelinks a.individual_source_link"); 
for(var i=0;i<links.length;i++) 
{ 
    links[i].onclick = null; 
} 

是我当前的代码,但它不会删除onclick事件。我不知道他们会是什么,因为这是一个grepmonkey脚本。删除元素的所有onclick事件

+0

“是我目前的代码(什么),但它不会删除onclick事件。” ! – 2011-02-07 08:02:55

+0

“这是我目前的代码,...”我认为 – w35l3y 2011-02-12 03:14:41

回答

6

您的代码只处理element.onclick案件添加的事件。添加addEventListener(适用于符合标准的浏览器)和attachEvent(适用于IE)的事件是什么?

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

0

我猜你的hrefonClick上的<a>链接上调用JavaScript函数。

您可以通过删除href标记,onClick事件或在这种情况下删除它们中的任何一个来删除其中的任何一个。

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

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

似乎没有工作http://tv.blinkx.com/show/penn-teller-bullshit/Uy5MaFV5qcfgsDINw-hR0_Xfvuo#s3e6 – Steven 2011-02-07 08:27:31

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

这篇文章很可能是有用的:

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对象参数,但你可以很容易地改变它传递一个字符串作为名称元素的ID,或者你认为是最好的。

虽然这只能解决点击事件,但您可以轻松修改它以处理其他或全部事件。