You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript TODO列表:点击删除按钮移除新创建DOM列表项

解决你的TODO列表删除按钮失效问题

你的代码里有两个关键问题导致删除按钮无法正常工作:

  1. 变量作用域错误:but和li是在添加按钮的点击回调内部声明的,外部的事件监听器根本访问不到这些变量,等于白绑定。
  2. 事件绑定时机错误:你试图在删除按钮还未创建时就为其添加事件监听,这显然不可能生效。

下面提供两种修复方案,可根据需求选择:

方案一:创建按钮时直接绑定事件

每次生成删除按钮的同时,为其添加点击事件监听器,利用闭包特性确保每个按钮能对应到自己所属的列表项:

let btn = document.querySelector('.add');
let ul = document.querySelector('.list');
let input = document.querySelector('.txt');

btn.addEventListener('click', function () {
  let txt = input.value.trim();
  if (!txt) return; // 避免添加空列表项
  
  let li = document.createElement('li');
  li.textContent = txt;
  
  let deleteBtn = document.createElement('button');
  deleteBtn.textContent = 'delete';
  
  // 为当前删除按钮绑定点击事件
  deleteBtn.addEventListener('click', function () {
    ul.removeChild(li);
    // 或者更简洁:li.remove(); 直接删除自身
  });
  
  li.appendChild(deleteBtn);
  ul.appendChild(li);
  input.value = ''; // 清空输入框,提升操作体验
});

方案二:事件委托(更推荐)

利用事件冒泡机制,仅在父元素ul上绑定一次事件监听器,通过判断点击目标是否为删除按钮来处理删除操作。这种方式更高效,尤其适合列表项较多的场景:

let btn = document.querySelector('.add');
let ul = document.querySelector('.list');
let input = document.querySelector('.txt');

btn.addEventListener('click', function () {
  let txt = input.value.trim();
  if (!txt) return;
  
  let li = document.createElement('li');
  li.textContent = txt;
  
  let deleteBtn = document.createElement('button');
  deleteBtn.textContent = 'delete';
  deleteBtn.classList.add('delete-btn'); // 给删除按钮添加类名,方便识别
  
  li.appendChild(deleteBtn);
  ul.appendChild(li);
  input.value = '';
});

// 在父元素ul上监听点击事件,统一处理所有删除操作
ul.addEventListener('click', function (e) {
  if (e.target.classList.contains('delete-btn')) {
    let li = e.target.parentElement;
    ul.removeChild(li);
    // 或者 li.remove();
  }
});

额外优化点

  • 添加输入内容非空判断,避免创建无效列表项
  • 清空输入框,优化连续添加的操作体验
  • 方案二中为删除按钮添加类名,更精准地判断点击目标

内容的提问来源于stack exchange,提问作者Davidino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 18:20:20