待办事项列表删除按钮无法正常工作
To-Do list remove button doesn't work properly
smb 可以帮助我处理“待办事项列表”吗?我想念它,不明白它是什么,我的删除按钮工作正常,但在重新加载页面后它停止工作。
这里 HTML
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>To-Do List</title>
<link rel="stylesheet" href="to-do-style.css">
</head>
<body>
<div class="flex-header">
<h1 id="header">To-Do List</h1>
<input type="text" id="input-task">
<button id="add-task-button">ADD TASK</button>
</div>
<ul id="task-list">
</ul>
<script src="to-do.js"></script>
</body>
</html>
这里是JS
"use strict";
let ul = document.getElementById('task-list');
function loadtodos(){
let data = JSON.parse(localStorage.getItem('todos'));
if (data) {
ul.innerHTML = data;
}
}
loadtodos();
document.getElementById('add-task-button').addEventListener('click', function (){
let input = document.querySelector('#input-task');
let node = document.createElement("li");
node.classList.add('tip');
//mark complete/incomplete task
let confirm = document.createElement('input');
confirm.type = 'checkbox';
node.appendChild(confirm);
//task text
let spanNode = document.createElement('span');//task text
spanNode.classList.add('task');
spanNode.appendChild(document.createTextNode(input.value));
node.appendChild(spanNode);
//DELETE task
let deleteBtn = document.createElement('button');
deleteBtn.classList.add('delete-btn');
deleteBtn.textContent = 'X';
deleteBtn.addEventListener('click', function (){
node.parentNode.removeChild(node);
localStorage.setItem('todos', JSON.stringify(ul.innerHTML));
});
node.appendChild(deleteBtn);
//adding element to list
document.getElementById('task-list').appendChild(node);
//clear input
document.getElementById('input-task').value=null;
//saver
localStorage.setItem('todos', JSON.stringify(ul.innerHTML));
});
如果我理解正确的话,我需要一个 'add-task-button' 之外的函数,我尝试了 querySelector,但它只删除了 1 行,我不太明白如何使用 querySelectorAll 删除它,因为当我使用它,按钮根本不起作用。
原因很可能是您没有找到带有删除 parentNode 引用的父容器。
对于该删除按钮,您有 2 个选项。一个是调整您的代码。您可以找到待办事项的容器(li
标签)并删除它
deleteBtn.addEventListener('click', function (e){
let parent = e.target.closest('li');
parent.parentNode.removeChild(parent);
localStorage.setItem('todos', JSON.stringify(ul.innerHTML));
});
另一种是在函数外,在循环外设置委托事件监听器。它适用于所有当前和将要创建的删除按钮
document.addEventListener('click', function (e){
if (e.target.classList.contains('delete-btn')){
let parent = e.target.closest('li');
parent.parentNode.removeChild(parent);
localStorage.setItem('todos', JSON.stringify(ul.innerHTML));
}
});
smb 可以帮助我处理“待办事项列表”吗?我想念它,不明白它是什么,我的删除按钮工作正常,但在重新加载页面后它停止工作。 这里 HTML
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>To-Do List</title>
<link rel="stylesheet" href="to-do-style.css">
</head>
<body>
<div class="flex-header">
<h1 id="header">To-Do List</h1>
<input type="text" id="input-task">
<button id="add-task-button">ADD TASK</button>
</div>
<ul id="task-list">
</ul>
<script src="to-do.js"></script>
</body>
</html>
这里是JS
"use strict";
let ul = document.getElementById('task-list');
function loadtodos(){
let data = JSON.parse(localStorage.getItem('todos'));
if (data) {
ul.innerHTML = data;
}
}
loadtodos();
document.getElementById('add-task-button').addEventListener('click', function (){
let input = document.querySelector('#input-task');
let node = document.createElement("li");
node.classList.add('tip');
//mark complete/incomplete task
let confirm = document.createElement('input');
confirm.type = 'checkbox';
node.appendChild(confirm);
//task text
let spanNode = document.createElement('span');//task text
spanNode.classList.add('task');
spanNode.appendChild(document.createTextNode(input.value));
node.appendChild(spanNode);
//DELETE task
let deleteBtn = document.createElement('button');
deleteBtn.classList.add('delete-btn');
deleteBtn.textContent = 'X';
deleteBtn.addEventListener('click', function (){
node.parentNode.removeChild(node);
localStorage.setItem('todos', JSON.stringify(ul.innerHTML));
});
node.appendChild(deleteBtn);
//adding element to list
document.getElementById('task-list').appendChild(node);
//clear input
document.getElementById('input-task').value=null;
//saver
localStorage.setItem('todos', JSON.stringify(ul.innerHTML));
});
如果我理解正确的话,我需要一个 'add-task-button' 之外的函数,我尝试了 querySelector,但它只删除了 1 行,我不太明白如何使用 querySelectorAll 删除它,因为当我使用它,按钮根本不起作用。
原因很可能是您没有找到带有删除 parentNode 引用的父容器。
对于该删除按钮,您有 2 个选项。一个是调整您的代码。您可以找到待办事项的容器(li
标签)并删除它
deleteBtn.addEventListener('click', function (e){
let parent = e.target.closest('li');
parent.parentNode.removeChild(parent);
localStorage.setItem('todos', JSON.stringify(ul.innerHTML));
});
另一种是在函数外,在循环外设置委托事件监听器。它适用于所有当前和将要创建的删除按钮
document.addEventListener('click', function (e){
if (e.target.classList.contains('delete-btn')){
let parent = e.target.closest('li');
parent.parentNode.removeChild(parent);
localStorage.setItem('todos', JSON.stringify(ul.innerHTML));
}
});