gpt4 book ai didi

javascript - 添加新元素后事件监听器不起作用

转载 作者:行者123 更新时间:2023-12-03 01:46:16 25 4
gpt4 key购买 nike

基本上,我有一个文本框,可以在其中写一些文本,单击“添加帖子”,新帖子将添加到其他帖子列表的前面(类似于 Twitter)。每个帖子都有一个“删除”按钮。

现在,当我在每个帖子上单击“删除”时,我的 console.log 上只写着“TEST”。而且效果很好。但是,在我添加帖子后,即已预先添加了一个新元素,事件监听器停止工作,即使对于现有的“删除”按钮(不仅仅是新添加的按钮)也是如此。

这就是我编写删除事件监听器的方式。

for(var i = 0; i < deleteDOM.length; i++) {
deleteDOM[i].addEventListener("click", deleteEntryCont);
}

...其中 deleteEntryCont 只是控制台暂时记录“TEST”的函数。

deleteDOMdocument.getElementsByClassName("delete") 的变量,只是一个节点列表。

这是添加新“帖子”的部分:

entryList.forEach(function(entry) {

var entryItemDOM = document.createElement("li");
var entryTextDOM = document.createElement("p");
var metaWrapperDOM = document.createElement("div");
var timeStampDOM = document.createElement("span");
var deleteDOM = document.createElement("span");

// Create entry wrapper & class names
entryItemDOM.className = "entry";
entryItemDOM.className += ` ${entry.mood}-entry`;
entryItemDOM.id = entry.id;

// Insert entry at the top of the stack
domEl.entriesDOM.insertBefore(entryItemDOM, domEl.entriesDOM.firstChild);

entryItemDOM.appendChild(entryTextDOM);
entryTextDOM.innerHTML = entry.text;

entryItemDOM.appendChild(metaWrapperDOM);
metaWrapperDOM.className = "overflow-hidden";

metaWrapperDOM.appendChild(timeStampDOM);
timeStampDOM.className = "timestamp";
timeStampDOM.innerHTML = entry.timeStamp;

metaWrapperDOM.appendChild(deleteDOM);
deleteDOM.className = "delete";
deleteDOM.innerHTML = "Delete";


});

其中 entryList 是上面的代码在 HTML 中呈现的对象数组。

可能是什么问题?

最佳答案

正如评论中所讨论的,您仅在加载页面时添加事件监听器,这意味着它仅添加到当时可见的帖子中。您需要将监听器单独添加到您创建的每个新帖子中:

metaWrapperDOM.appendChild(deleteDOM);
deleteDOM.className = "delete";
deleteDOM.innerHTML = "Delete";
deleteDOM.addEventListener('click', deleteEntryCont);

关于javascript - 添加新元素后事件监听器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50624631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com