问题描述
我已经为跟踪日常任务的小型应用程序编写了一些代码。我正在使用id = 'active'
克隆节点,该节点具有将其传输到另一列的按钮。用于执行此操作的逻辑不适用于从createNewButton1
创建的新克隆节点。
<!DOCTYPE html>
<html lang="en">
<head>
<Meta charset="UTF-8" />
<Meta name="viewport" content="width=device-width,initial-scale=1.0" />
<Meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Project Board</title>
<link rel="stylesheet" href="assets/styles/app.css" />
<script src="assets/scripts/app.js" defer></script>
</head>
<body>
<header id="main-header">
<h1>Project Planner</h1>
</header>
<div>
<section id="active">
<header>
<h2>Days</h2>
</header>
<ul>
<li
id="p4"
data-extra-info="Super important conference! Fictional but still!"
class="card"
>
<h2>Monday</h2>
</li>
</ul>
</section>
Class ProjectItem {
constructor(id,updateProjectListsFunction,type) {
this.id = id;
this.updateProjectListsHandler = updateProjectListsFunction;
this.connectMoreInfoButton();
this.connectSwitchButton(type);
this.createNewButton1();
}
createNew () {
const newItem = document.getElementById('active').querySelector('li');
const cln = newItem.cloneNode(true);
document.getElementById('active').appendChild(cln);
}
createNewButton1 () {
const addNewButton = document.getElementById('addButton');
addNewButton.addEventListener( 'click',this.createNew);
}
导致切换到另一列的按钮使用事件侦听器,这不适用于新克隆的节点。
connectSwitchButton(type) {
const projectItemElement = document.getElementById(this.id);
let switchBtn = projectItemElement.querySelector('button:last-of-type');
switchBtn = DOMHelper.clearEventListeners(switchBtn);
switchBtn.textContent = type === 'active' ? 'Finish' : 'Activate';
switchBtn.addEventListener(
'click',this.updateProjectListsHandler.bind(null,this.id)
);
}
解决方法
您需要创建一个click
事件处理程序,该事件处理程序将调用moveElement
。您还需要注意ID,以避免重复:
createNew () {
const newItem = document.getElementById('active').querySelector('li');
const cln = newItem.cloneNode(true);
cln.id = "p" + (document.querySelectorAll("#active > li").length + 1);
document.getElementById('active').appendChild(cln);
cln.addEventListener("click",function() {DOMHelper.moveElement(cln.id,"#finished-projects ul")});
}
在这里测试:https://jsfiddle.net/gcL6e3kz/
观察:这与您所询问的问题无关,但是如果我在所有卡上单击“完成”,然后单击“添加新”,则它将失败,因为没有要克隆的内容。为此,最好通过模板文字创建一些模板,然后可以使用它们而不必假设至少有一张卡片。编码愉快!