簡體   English   中英

刪除元素的所有onclick事件

[英]Remove All onclick Events for an Element

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

是我當前的代碼,但它不會刪除onclick事件。 我不知道它們會是什么,因為這是一個油脂腳本。

您的代碼僅處理element.onclick案例添加的事件。 使用addEventListener(適用於標准的瀏覽器)和attachEvent(適用於IE)添加的事件如何?

您需要使用removeEventListener和detachEvent刪除事件以及將.onclick設置為null。 然后你的所有基地都將被覆蓋。

這篇文章可能會有用:

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名稱,或者您認為最好。

雖然這只能解決點擊事件,但您可以輕松修改它以處理其他人或所有事件。

由於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() )。

我猜你在onClick為一個<a>鏈接調用了一個href或一個JavaScript函數。

您可以通過刪除href標記, onClick事件或在這種情況下刪除它們中的任何一個來刪除其中任何一個。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM