簡體   English   中英

即使刪除了元素,事件監聽器也會多次觸發?

[英]Multiple firings of event listener even after element has been removed?

一旦CSS轉換完成,我將使用這段代碼從DOM中刪除元素。

elem.addEventListener('transitionend',function(e) {
    this.parentNode.removeChild(this);
}, false);

但是由於過渡影響兩個屬性的不透明度,即1-> 0,高度20px-> 0,因此該事件觸發兩次,並在第二次觸發時發生錯誤(因為該元素已從DOM移除)。

我嘗試測試該屬性(如此處所示: https : //stackoverflow.com/a/18689069/1058739 ),但是顯然該測試然后失敗了。

當然,當從DOM中刪除元素時,還應該刪除所有附加到該元素的事件偵聽器嗎?

我在這里想念的訣竅是什么?

謝謝

為什么從DOM分離元素會刪除所有事件處理程序? 元素仍然存在,只是不存在於DOM中。 想像一下,如何將元素從一個父元素移動到另一個父元素

element.parentElement.removeChild(element)
newParent.appendChild(element)

您是否真的認為分離所有事件處理程序是一個好主意?

話雖如此,您可以通過兩種方式解決您的問題。

檢查元素是否具有父元素

elem.addEventListener('transitionend', function(e) {
    if (this.parentNode) {
        this.parentNode.removeChild(this);
    }
}, false);

要么

分離事件監聽器

var onTransitionEnded = function (e) {
    this.parentNode.removeChild(this);
    this.removeEventListener('transitionend', onTransitionEnded);
}
elem.addEventListener('transitionend', onTransitionEnded)

暫無
暫無

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

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