2011-02-07 220 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,或者你認爲是最好的。

雖然這隻能解決點擊事件,但您可以輕鬆修改它以處理其他或全部事件。