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

基于done类实现的列表项点击添加/取消删除线功能失效排查

问题排查:点击列表项添加/取消删除线功能失效

你的代码存在以下几个关键问题,导致功能无法正常运行:

  • HTMLCollection不能直接绑定事件:document.getElementsByTagName("li")返回的是类数组的HTMLCollection,不是单个元素,必须遍历每个<li>单独添加事件监听。
  • 事件目标未正确获取:strikeThough函数里的target变量未定义,需要通过事件参数event获取点击目标,即event.target。
  • 标签名字段拼写错误:tagname应该改为tagName,且该属性返回大写字符串,判断时要对应"LI"。
  • 类名操作方法错误:className是字符串类型,没有toggle方法,正确的类名切换应该用classList.toggle()。
  • 新增列表项未绑定事件:当前代码只给页面初始的<li>加了事件,通过输入框新增的列表项没有点击事件,需要在创建新元素时一并绑定。

修正后的script.js代码如下:

var button = document.getElementById("enter");
var input = document.getElementById("userinput");
var ul = document.querySelector("ul");
var li = document.getElementsByTagName("li");

function inputLength() {
    return input.value.length;
}

// 把点击切换类名的逻辑抽成独立函数
function toggleDoneClass(event) {
    if (event.target.tagName === "LI") {
        event.target.classList.toggle("done");
    }
}

// 遍历初始的li,绑定点击事件
for (var i = 0; i < li.length; i++) {
    li[i].addEventListener('click', toggleDoneClass);
}

function createListElement() {
    var li = document.createElement("li");
    li.appendChild(document.createTextNode(input.value));
    // 给新创建的li绑定点击事件
    li.addEventListener('click', toggleDoneClass);
    ul.appendChild(li);
    input.value = "";
}

function addListAfterClick() {
    if (inputLength() > 0) {
        createListElement();
    }
}

function addListAfterKeypress(event) {
    if (inputLength() > 0 && event.keyCode === 13) {
        createListElement();
    }
}

button.addEventListener("click", addListAfterClick);
input.addEventListener("keypress", addListAfterKeypress);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:48:23