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

JavaScript待办事项列表添加localStorage后返回undefined及<li>元素异常问题求助

修复后的完整代码及说明

下面是修正后的代码,我还做了一些体验和稳定性的优化:

<form>
  <input type="text" name="task" id='task' placeholder="New..." />
  <input type="button" name="" value='AddTask' onclick="addTask()" />
</form>
<ul id="myList">
</ul>
<script type="text/javascript">
var ul = document.getElementById("myList");

addTask = function() {
  const taskInput = document.getElementById("task");
  // 用trim()过滤纯空格的无效输入
  if (taskInput.value.trim() !== ""){
    // 生成唯一ID
    let itemId = Date.now().toString('16') + Math.random().toString('16').substring(2);
    // 改用createElement创建元素,更安全且性能更好
    const li = document.createElement('li');
    li.id = itemId;
    li.innerHTML = `${taskInput.value}<button onclick="removeTask('${itemId}')">X</button>`;
    ul.appendChild(li);
    saveLocalStorage();
    // 添加任务后清空输入框,提升用户体验
    taskInput.value = "";
  }
}

removeTask = function (itemId) {
  const targetItem = document.getElementById(itemId);
  // 增加判断,避免找不到元素时抛出报错
  if (targetItem) {
    targetItem.remove();
    saveLocalStorage();
  }
}

saveLocalStorage = function() {
  // 核心修复:把InnerHTML改成小写的innerHTML
  localStorage.setItem('savedList', ul.innerHTML);
}

window.onload = function() {
  const savedContent = localStorage.getItem('savedList');
  // 增加判断,避免存储为空时把undefined赋值给innerHTML
  if (savedContent) {
    ul.innerHTML = savedContent;
  }
}
</script>

主要的修改点:

  1. 修复核心大小写问题:把ul.InnerHTML改为ul.innerHTML,确保能正确获取ul的HTML内容并存入localStorage。
  2. 优化元素创建方式:用createElement和appendChild替代innerHTML +=,避免DOM重复渲染和HTML注入风险。
  3. 增加空值校验:读取localStorage时判断是否有有效内容,删除元素时判断目标元素是否存在,避免不必要的报错。
  4. 提升用户体验:添加任务后自动清空输入框,用trim()过滤纯空格输入。
  5. 规范HTML属性:把nome修正为name,符合HTML标准。

现在你运行修改后的代码,应该就能正常存储和读取待办事项,li元素的创建也不会有异常了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:19:09