javascript - html文件中的push()元素后功能不起作用
问题描述
我想创建一个待办事项列表,<input type="text">
当单击带有 class 的按钮时,将添加输入和删除的元素.delete
。每当我将元素推送到数组中时。它在html页面中,innerHTML
删除按钮停止工作。删除按钮适用于写入 Html 代码的元素。如果有人可以帮助我,我将非常感激。`
const itemsLIst = document.querySelector('.item-list'); // where we want to add our list
const addText = document.querySelector('.submit'); // add button
let deleteText = document.querySelectorAll('.delete'); // delete button
// const list = JSON.parse(localStorage.getItem('items')) || [];
let list = [];
function addItem(e) {
let text = document.querySelector('.input_bar').value; //text typed in input bar
if (text.length != 0) {
list.push(`<div>
<p>${text}</p>
<button class="delete" onclick='deleteItem'></button>
<button class="edit">Edit</button>
</div><hr>`);
itemsLIst.innerHTML = list.join('');
text = '0';
document.getElementById("myText").value = "";
} else {
return;
}
}
function deleteItem(e) {
this.parentElement.style.display = 'none';
}
for (var i = 0 ; i < deleteText.length; i++) {
deleteText[i].addEventListener('click', deleteItem);
}
addText.addEventListener('click', addItem);
<style>
body {
width: 100%;
height: 100vh;
background-color: rgb(115, 115, 197);
margin: 0;
padding: 0;
position: relative;
}
.container {
width:50%;
height:70%;
position: absolute;
background-color: rgb(241, 241, 241);
font-family: Arial, Helvetica, sans-serif;
border-bottom-left-radius: 25px;
border-bottom-right-radius: 25px;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
overflow-y: scroll;
}
.heading {
width: 100%;
height: 122px;
background-color: #5B45B9;
display: flex;
align-items: center;
justify-content: center;
}
.heading h1 {
color: white;
font-size: 40px;
}
.item-list {
width: 100%;
padding: 0 0 30px 0;
}
.item-list div {
width: auto;
height: 60px;
}
p {
width: 60%;
float: left;
font-size: 25px;
padding-left: 30px;
margin-top: 12px ;
}
.item-list button {
width: 60px;
height: 60px;
font-size: 18px;
float: right;
}
.delete {
font-size: 30px;
color: red;
}
.input_form {
width: 100%;
padding: 30px 0 30px 0;
position: absolute;
bottom: 0;
text-align: center;
}
.input_form .input_bar {
width: 80%;
height: 50px;
font-size: 18px;
border: none;
}
.input_form button {
width: 10%;
height: 50px;
float: right;
margin-right: 30px;
}
</style>
<html>
<head>
</head>
<body>
<div class="container">
<div class="heading">
<h1>TO-DO LIST</h1>
</div>
<div class="item-list">
<div>
<p>TEEXT2</p>
<button class="delete"></button>
<button class="edit">Edit</button>
</div>
<div>
<p>TEEXT1</p>
<button class="delete"></button>
<button class="edit">Edit</button>
</div>
<div>
<p>TEEXT3</p>
<button class="delete"></button>
<button class="edit">Edit</button>
</div>
<div>
<p>TEEXT4</p>
<button class="delete"></button>
<button class="edit">Edit</button>
</div>
</div>
<div class="input_form">
<input type="text" class="input_bar" id="myText" placeholder="Add ITEM">
<button class="submit">+ADD ITEM</button>
</div>
</div>
</body>
</html>
<button class="delete"></button>
<button class="edit">Edit</button>
</div>
<div>
<p>TEEXT1</p>
<button class="delete"></button>
<button class="edit">Edit</button>
</div>
<div>
<p>TEEXT3</p>
<button class="delete"></button>
<button class="edit">Edit</button>
</div>
<div>
<p>TEEXT4</p>
<button class="delete"></button>
<button class="edit">Edit</button>
</div>
</div>
<div class="input_form">
<input type="text" class="input_bar" id="myText" placeholder="Add ITEM">
<button class="submit">+ADD ITEM</button>
</div>
<script src="script.js"></script>
</div>
</body>
</html>`
解决方案
实际上,您只使用以下行触发 DOM“原始”删除按钮(使用 HTML 代码加载的按钮):
let deleteText = document.querySelectorAll('.delete'); // delete button
您的其他 .delete 在第一次加载 DOM 后加载,甚至没有在“deleteText”数组中列出!每次添加新项目时都必须刷新 deleteText。就像是 :
const itemsLIst = document.querySelector('.item-list'); // where we want to add our list
const addText = document.querySelector('.submit'); // add button
let deleteText = document.querySelectorAll('.delete'); // delete button
// const list = JSON.parse(localStorage.getItem('items')) || [];
let list = [];
function addItem(e) {
let text = document.querySelector('.input_bar').value; //text typed in input bar
if (text.length != 0) {
list.push(`<div>
<p>${text}</p>
<button class="delete" onclick='deleteItem'></button>
<button class="edit">Edit</button>
</div><hr>`);
itemsLIst.innerHTML = list.join('');
text = '0';
document.getElementById("myText").value = "";
} else {
return;
}
}
function deleteItem(e) {
this.parentElement.style.display = 'none';
}
function triggerDeleteButton(){
deleteText = document.querySelectorAll('.delete'); // delete button
for (var i = 0 ; i < deleteText.length; i++) {
deleteText[i].addEventListener('click', deleteItem);
}
}
addText.addEventListener('click', function(){
addItem() ;
triggerDeleteButton() ;
}
);
推荐阅读
- ios - 未使用调试器启动时,Crashlytics 与 Xcode 10 一起崩溃
- c# - CsProj 迁移:Microsoft.Excel.Interop 程序集上的动态成为对象
- python - Pandas:将日期分成 30 分钟间隔并计算平均值
- javascript - asp.net core 下载 excel 文件和消息
- ssh.net - SSH.Net,在启动命令时识别shell何时要求用户输入。BeginExecute()
- python - 如何在不启动应用程序的情况下在 django 应用程序中使用 Django 导入
- c# - 如何将 Infrastructure.DbQuery 转换为 ViewModel 类型?
- angular - 如何用角度颜色突出显示选定的mat-list-item?
- asp.net-core - ASP.NET Core - 如何创建一个长寿的 RabbitMQ 连接对象?
- python - 具有类、产量支持和 z3py 的 Numba 替代方案