能。sessionstorage在页面刷新后保留数据,需通过input事件实时存储、domcontentloaded时精准还原、提交后及时清理,并添加时间提示等体验优化措施。

能。sessionStorage 在页面刷新后数据不会丢失,只要标签页没关,表单草稿就能原样恢复——关键不在“能不能”,而在“怎么存得准、填得对、清得干净”。
实时监听输入,别等提交才存
用户可能中途关闭页面或意外刷新,靠 submit 事件存数据已经晚了。必须对所有可编辑字段绑定 input 事件:
- 、
- 用 field.name 作为 key 前缀(如
draft_name),确保每个字段独立存储 - 避免用 keyup:长按、粘贴、拖入文本时容易漏存;input 事件在中文上屏后即触发,更可靠
页面加载时精准还原
别在 window.load 里恢复——DOM 可能还没就绪。应在 DOMContentLoaded 后执行:
- 遍历表单所有带 name 的字段,读取对应 sessionStorage 值
- 对 checkbox/radio,sessionStorage 存的是字符串,需转成布尔值:
el.checked = value === 'true' - textarea 和 input[type=text] 直接赋值
el.value;select 用el.value = storedValue - getItem 返回 null 而非 undefined,判断用
!== null更稳妥
成功提交后及时清理
草稿不是永久保存的,否则下次打开表单会显示旧内容:
- 如果是同步 submit,可在 form 的 submit 事件回调末尾批量清除:
sessionStorage.removeItem('draft_xxx') - 若用 fetch/axios 异步提交,清理动作必须放在响应成功的回调里,不能提前执行
- 提供「清空草稿」按钮,点击即调用
sessionStorage.clear()或逐个 removeItem
加一点体验细节更实用
用户能感知到草稿被记住,信任感就强了一分:
- 在表单顶部加一行小字提示:“已自动保存草稿(2 分钟前)”,时间戳存在 sessionStorage 里
- 对必填但为空的字段,恢复后不触发校验;只在校验通过或用户主动提交时检查
- 多步骤表单中,把当前 step 也存进 sessionStorage,刷新后直接跳转到上次所在页











