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

应在何处添加forEach循环以实现每次创建新任务项?

解决方法

你的代码存在几个关键问题,导致只能创建单个任务:

  1. 用list.innerHTML = ...直接覆盖了容器内的所有内容,而非追加新任务
  2. id仅在页面加载时生成一次,所有任务会共用同一个ID
  3. 你把DOM元素直接存入数组,正确的做法应该存储任务数据,再通过数据渲染页面

下面是修复后的完整代码:

JavaScript

let listArray = [];
const addBtn = document.querySelector("#add");
const listContainer = document.querySelector(".list");
const input = document.querySelector("#text-area");

// 渲染所有任务的函数
function renderTasks() {
  listContainer.innerHTML = "";
  
  // 用forEach遍历任务数组,逐个生成任务节点
  listArray.forEach(task => {
    const taskItem = document.createElement("div");
    taskItem.classList.add("todo");
    taskItem.innerHTML = `
      <div data-type="${task.id}"></div>
      <p>${task.content}</p>
    `;
    listContainer.appendChild(taskItem);
  });
}

addBtn.addEventListener("click", () => {
  const content = input.value.trim();
  if (!content) return; // 空任务不添加

  // 每次新增任务时生成唯一ID
  const newId = Math.floor((Math.random() + Date.now()) * 3000);
  
  // 把任务数据存入数组
  listArray.push({
    id: newId,
    content: content
  });

  // 重新渲染所有任务,确保旧任务不会被覆盖
  renderTasks();
  
  // 清空输入框,方便下次输入
  input.value = "";
});

HTML

<div class="container">
  <div id="User-Input">
    <input id="text-area" type="text">
    <button id="add">Add</button>
  </div>
  <div class="list"></div>
</div>

核心改动说明:

  • 新增renderTasks函数,通过forEach遍历任务数组重新渲染所有任务,彻底解决旧任务被覆盖的问题
  • 将ID生成逻辑移到点击事件内部,每个新任务都拥有独立的唯一ID
  • 数组中存储的是包含ID和内容的任务对象,而非DOM元素,方便后续扩展删除、编辑等功能
  • 添加空内容校验,避免创建无效任务
  • 每次添加任务后清空输入框,提升使用体验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:05:38