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

JS开发待办清单应用 点击动态添加的li元素无法删除

问题根因
  • 事件绑定逻辑位置错误:删除li的点击事件写在添加按钮回调的外部,页面初始加载时就会执行这行代码,此时动态待办li还未创建,input变量指向无效,新增的li根本没绑定上删除监听
  • 待办容器选择错误:代码里把新建的li直接插入到了存放输入框、+按钮的#newTask容器中,和HTML里预留的待办展示区(.added标签下的<ul>节点)不匹配
  • 缺少空值校验:输入框无内容时点击+也会生成空白无效待办
修复实现

推荐使用事件委托方案,不需要给每个新增li单独绑定事件,后续新增任意多待办都能正常响应点击:

function dark() { // 深色模式切换
  const element = document.body;
  element.classList.toggle("dark-mode");
}

const addToDoButton = document.getElementById('addToDo');
// 修正容器选择,指向专门放待办li的ul节点
const toDoContainer = document.querySelector('.added ul');
const inputField = document.getElementById('tasks');

addToDoButton.addEventListener('click', function() {
  const taskContent = inputField.value.trim();
  // 空内容直接拦截,不生成待办
  if (!taskContent) return;

  const newTask = document.createElement('li');
  newTask.classList.add('tasks');
  newTask.innerText = taskContent;
  toDoContainer.appendChild(newTask);
  // 添加完成清空输入框
  inputField.value = '';
})

// 给父级ul绑定统一点击监听,通过事件冒泡捕获li的点击动作
toDoContainer.addEventListener('click', function(e) {
  if (e.target.tagName === 'LI') {
    // 要实现划线标记完成就替换下面这行,改成e.target.style.textDecoration = "line-through"
    e.target.remove();
  }
})

原有HTML代码不需要改动,替换JS后即可实现点击对应li直接删除任务的效果。

内容的提问来源于stack exchange,提问作者Alana Rèyes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:30:53