【问题标题】:To-Do list remove button doesn't work properly待办事项列表删除按钮无法正常工作
【发布时间】:2021-09-26 05:05:19
【问题描述】:

可以帮我处理我的“待办事项列表”,我想念 smth 并且不明白它是什么,我的删除按钮工作正常,但重新加载页面后它停止工作。 这里是 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));
});

如果我理解正确,我需要一个“添加任务按钮”之外的函数,我尝试了 querySelector,但它只删除了 1 行,我不太明白如何使用 querySelectorAll 删除它,因为当我使用它,按钮根本不起作用。

【问题讨论】:

    标签: javascript html json class local-storage


    【解决方案1】:

    原因很可能是您没有找到带有删除 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));
           }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-06
      • 1970-01-01
      • 2021-06-09
      • 2021-07-08
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      • 1970-01-01
      相关资源
      最近更新 更多