第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Javascript / DOM:如何刪除DOM對象的所有事件?

Javascript / DOM:如何刪除DOM對象的所有事件?

元芳怎么了 2019-08-17 15:24:08
Javascript / DOM:如何刪除DOM對象的所有事件?只是提問:有沒有辦法徹底刪除對象的所有事件,例如div?編輯:我正在添加div.addEventListener('click',eventReturner(),false);一個(gè)事件。function eventReturner() {     return function() {         dosomething();     };}EDIT2:我找到了一種方法,但是不能用于我的情況:var returnedFunction;function addit() {     var div = document.getElementById('div');     returnedFunction = eventReturner();     div.addEventListener('click',returnedFunction,false); //You HAVE to take here a var and not the direct call to eventReturner(), because the function address must be the same, and it would change, if the function was called again.}function removeit() {     var div = document.getElementById('div');     div.removeEventListener('click',returnedFunction,false);}
查看完整描述

3 回答

?
九州編程

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個(gè)贊

我不確定你刪除所有事件的意思。刪除特定類型事件的所有處理程序或一種類型的所有事件處理程序?

刪除所有事件處理程序

如果要?jiǎng)h除所有事件處理程序(任何類型),可以克隆該元素并將其替換為其克?。?/p>

var clone = element.cloneNode(true);

注意:這將保留屬性和子項(xiàng),但不會(huì)保留對DOM屬性的任何更改。


刪除特定類型的“匿名”事件處理程序

另一種方法是使用,removeEventListener()但我想你已經(jīng)嘗試過這個(gè)并沒有用。這是一個(gè)問題

調(diào)用addEventListener匿名函數(shù)每次都會(huì)創(chuàng)建一個(gè)新的偵聽器。調(diào)用removeEventListener匿名函數(shù)無效。匿名函數(shù)在每次調(diào)用時(shí)都會(huì)創(chuàng)建一個(gè)唯一的對象,它不是對現(xiàn)有對象的引用,盡管它可以調(diào)用一個(gè)對象。以這種方式添加事件偵聽器時(shí),請確保它只添加一次,它是永久的(無法刪除),直到它被添加到的對象被銷毀。

您實(shí)際上是將一個(gè)匿名函數(shù)傳遞給addEventListeneras eventReturner返回一個(gè)函數(shù)。

您有兩種可能性來解決這個(gè)問題:

  1. 不要使用返回函數(shù)的函數(shù)。直接使用該功能:

    function handler() {
        dosomething();}div.addEventListener('click',handler,false);
  2. 創(chuàng)建一個(gè)包裝器,用于addEventListener存儲(chǔ)對返回函數(shù)的引用并創(chuàng)建一些奇怪的removeAllEvents函數(shù):

    var _eventHandlers = {}; // somewhere globalfunction addListener(node, event, handler, capture) {
        if(!(node in _eventHandlers)) {
            // _eventHandlers stores references to nodes
            _eventHandlers[node] = {};
        }
        if(!(event in _eventHandlers[node])) {
            // each entry contains another entry for each event type
            _eventHandlers[node][event] = [];
        }
        // capture reference
        _eventHandlers[node][event].push([handler, capture]);
        node.addEventListener(event, handler, capture);
     }function removeAllListeners(node, event) {
        if(node in _eventHandlers) {
            var handlers = _eventHandlers[node];
            if(event in handlers) {
                var eventHandlers = handlers[event];
                for(var i = eventHandlers.length; i--;) {
                    var handler = eventHandlers[i];
                    node.removeEventListener(event, handler[0], handler[1]);
                }
            }
        }}

    然后你可以用它:

    addListener(div, 'click', eventReturner(), false)// and laterremoveListeners(div, 'click')

DEMO

注意:如果您的代碼運(yùn)行了很長時(shí)間并且您正在創(chuàng)建并刪除大量元素,則必須確保在_eventHandlers銷毀它們時(shí)刪除其中包含的元素。


查看完整回答
反對 回復(fù) 2019-08-17
?
茅侃侃

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超21個(gè)贊

這將從子節(jié)點(diǎn)中刪除所有偵聽器,但對于大頁面來說會(huì)很慢。寫得非常簡單。

element.outerHTML = element.outerHTML;


查看完整回答
反對 回復(fù) 2019-08-17
  • 3 回答
  • 0 關(guān)注
  • 3856 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號