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

勾选复选框时如何用JS添加text-decoration: line-through样式?解决checkBox未定义报错

错误原因

  • 作用域问题:checkBox 是 addTask 函数内的局部变量,函数外的代码无法访问,直接触发未定义报错
  • 事件监听缺失:现有判断checkbox状态的代码仅在脚本首次加载时执行一次,无法响应用户点击checkbox的操作
  • 类绑定范围错误:直接给id为taskItem的整个ul列表切换样式,会导致所有任务同时被划线,仅需给当前勾选的对应任务加类即可
  • DOM元素未提前获取:直接使用taskItem访问DOM,没有提前通过DOM选择器获取元素,部分浏览器会执行失败

修正后的JS代码

// 提前全局获取任务列表容器元素
const taskItem = document.getElementById("taskItem");
// 全局任务存储数组,放在函数外避免每次新增任务被重置
const taskList = [];

function addTask() {
  const checkBox = document.createElement("input");
  checkBox.type = "checkbox";
  const task = document.createElement("li");
  const inputVal = document.getElementById("taskName").value.trim();

  if (inputVal === "") {
    alert("Luilak!");
    return;
  }

  task.textContent = inputVal;
  // 将复选框放在任务li内部,结构更合理
  task.appendChild(checkBox);
  taskItem.appendChild(task);
  // 存入全局任务数组
  taskList.push(inputVal);
  // 清空输入框
  document.getElementById("taskName").value = "";

  // 绑定复选框变更事件,切换当前任务的完成状态
  checkBox.addEventListener("change", function () {
    task.classList.toggle("completed", this.checked);
  });
}

修改说明

  1. 调整变量作用域,全局获取任务列表容器,任务存储数组移到函数外避免重置
  2. 创建复选框时直接绑定change事件,实时响应用户的勾选操作
  3. 仅给当前勾选任务对应的li元素切换completed类,不会影响其他任务
  4. 用textContent替代innerHTML避免XSS安全风险,新增任务后自动清空输入框优化体验
  5. 代码逻辑完全匹配你原有的CSS和HTML结构,无需修改其他部分代码即可直接运行

内容的提问来源于stack exchange,提问作者Ynte Wiardus Braaksma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:18:04