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>
主要的修改点:
- 修复核心大小写问题:把
ul.InnerHTML改为ul.innerHTML,确保能正确获取ul的HTML内容并存入localStorage。 - 优化元素创建方式:用
createElement和appendChild替代innerHTML +=,避免DOM重复渲染和HTML注入风险。 - 增加空值校验:读取localStorage时判断是否有有效内容,删除元素时判断目标元素是否存在,避免不必要的报错。
- 提升用户体验:添加任务后自动清空输入框,用
trim()过滤纯空格输入。 - 规范HTML属性:把
nome修正为name,符合HTML标准。
现在你运行修改后的代码,应该就能正常存储和读取待办事项,li元素的创建也不会有异常了。
内容的提问来源于stack exchange,提问作者jumper_jumper
相关产品推荐
相关产品推荐

