首页 > 网页制作 >HTML怎么做待办任务管理页面?实现教程(纯干货)

HTML怎么做待办任务管理页面?实现教程(纯干货)

来源:互联网 2026-08-01 08:31:09

实现一个可增删改的待办列表,使用原生 HTML 和 JavaScript 一点也不复杂,但需要将三个关键点配合好:HTML 结构提供输入框、按钮和任务容器;JavaScript 负责监听提交事件、动态创建带 data-id 的 li 元素并绑定删除/完成事件;localStorage 则扮演持久化角

实现一个可增删改的待办列表,使用原生 HTML 和 JavaScript 一点也不复杂,但需要将三个关键点配合好:HTML 结构提供输入框、按钮和任务容器;JavaScript 负责监听提交事件、动态创建带 data-idli 元素并绑定删除/完成事件;localStorage 则扮演持久化角色,以 JSON 字符串形式存取包含 id、text 和 completed 字段的数组,读取后渲染并同步 checkbox 状态,同时监听 storage 事件实现多标签页同步。简单来说,这就像搭积木——每一块都得严丝合缝。

HTML怎么做待办任务管理页面?实现教程(纯干货)

长期稳定更新的攒劲资源: >>>点此立即查看<<<

怎么用原生 HTML + JS 实现可增删的待办列表

静态页面本身做不到数据持久化,因此“任务管理”这件事天生需要 HTML 结构、JavaScript 行为和浏览器本地存储(localStorage)三者协作。不依赖框架的话,核心套路就是:监听表单提交、动态生成 li 元素、绑定删除事件、最后保存到 localStorage

很多人容易踩的坑是直接用 document.write 或反复用 innerHTML = ... 覆盖整个列表——这样会丢失之前绑定的事件监听器,导致删除按钮点不动。

实操要点:

  • document.createElement('li') 创建每一项,再用 appendChild() 追加,避免重绘时事件丢失。
  • 给每个删除按钮设置 data-id 属性(比如 data-id="3"),而不是依赖 DOM 位置索引——否则排序或过滤后容易错位。
  • 提交表单时记得调用 event.preventDefault(),否则页面刷新一下,所有状态全没了。
  • 初始渲染列表时,先清空容器(ul.innerHTML = ''),再遍历 localStorage 数据逐个追加,确保视图与数据对齐。

localStorage 存什么格式才不容易出 bug

存字符串没问题,但存对象必须经过 JSON.stringify(),取出来必须 JSON.parse()。直接存数组或对象会变成逗号拼接的字符串(比如 "1,2,3"),后续 JSON.parse() 就会报 SyntaxError

正确的做法是统一用数组结构,每个项目带上 idtextcompleted 字段:

const todos = [
  { id: 1, text: '写接口文档', completed: false },
  { id: 2, text: '修复登录态失效', completed: true }
];

存取逻辑最好加一层异常保护:

  • 读取时用 try/catch 包裹 JSON.parse(localStorage.getItem('todos') || '[]')
  • 写入前校验数据类型:Array.isArray(todos) && todos.every(t => typeof t.text === 'string')
  • 不要用 localStorage.length 来判断是否有数据——它返回的是 key 的数量,不是 todo 条数。

怎么让完成/未完成状态切换不卡顿且可回退

勾选 checkbox 触发状态更新时,如果每次都在 localStorage 里全量写入整个数组,数据少还行,超过 200 条就可能造成输入延迟(尤其低端安卓机)。更稳妥的做法是只更新单条:

  • input[type="checkbox"] 绑定 change 事件,通过 event.target.dataset.id 找到对应项
  • findIndex 定位,直接改 todos[index].completed = event.target.checked,再 localStorage.setItem('todos', JSON.stringify(todos))
  • 不要在 checkbox 上用 onclick 内联写法(比如 onclick="toggle(1)"),维护困难且容易闭包陷阱
  • 如果用户快速连点两次,需要防重复写入:加一个节流标记 if (isSaving) return; isSaving = true; setTimeout(() => isSaving = false, 300);

为什么刷新后 checkbox 状态和文字对不上

典型现象:页面刷新后,某项显示已完成,但 checkbox 没勾上;或者文字是“买咖啡”,勾选框却变成半透明灰色(indeterminate)。根本原因在于 DOM 渲染顺序和数据同步没对齐。

关键点:

  • 必须等 localStorage 数据读取完成(注意它是同步的,但逻辑上要在数据就绪后再生成 DOM),不能一边读一边 append
  • 创建 checkbox 时,显式设置 checkbox.checked = todo.completed,不能依赖默认值
  • 如果用了 contenteditable 做双击编辑,记得在 blur 时才保存修改,否则失焦前的数据会丢失
  • IE 在隐私模式下不支持 localStorage,会抛 SecurityError,需要兜底:try { localStorage.setItem(...) } catch(e) { console.warn('localStorage not available'); }

最容易被忽略的是:没有监听 storage 事件。多个标签页同时打开该页面时,一个页面改了数据,其他页面不会自动更新视图——解决办法是手动加上 window.addEventListener('storage', reloadList)

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。