未保存的修改需在离开前提示
别名: 脏数据提示 · 离开确认 · dirty state prompt
概念解释
人在更新一条记录时,改动往往先停在本地,尚未成为服务器上的当前值。未保存的修改(unsaved / dirty state)就是这截差额。当人主动离开——返回列表、关标签、切到另一条——差额会被丢掉,除非界面在离开前问一句,并提供留下、丢弃或先保存。它管的是有意图的导航,不是进程被杀之后草稿还在不在,也不是编辑态看起来像不像查看态。
机制
离开比保存便宜。返回、手势滑出、点另一行,都比找「保存」更短。人的注意在下一项任务上,不会先扫一眼保存状态。若自动保存把每次击键都落盘,离开本不必问;若保存是显式动作,离开就是一条会吞掉工作的捷径。提示能起作用,是因为它把「导航」暂时变成「对差额做决定」。弹得太勤——切字段、预览、打开附件也弹——人会养成一律点「离开」的习惯,真有长文未保存时提示已经失效。没有可见的脏标记时,人甚至不相信自己改过,会把提示当成误报关掉。
怎么研究
在可写记录里安排一段必须留下的改动,然后插入离开机会:返回、关页、切记录、刷新。比较无提示、一律提示、仅在确有差额时提示。
自变量:是否存在脏标记、提示是否区分保存/丢弃/留下、自动保存是否已把差额清零。 因变量:离开后改动丢失率、提示被习惯性点掉的比例、本无改动却被拦住的次数。
实验室被试被要求「小心保存」,丢失率会被压低。更干净的做法是在任务中插入一个看起来更急的第二目标(去看另一条的截止日期),看有多少人带着未保存改动走。浏览器原生的 beforeunload 文案无法自定义后果说明,测到的往往是「烦不烦」,不是「决策质量」。
边界
每次击键都已同步的文档,离开提示是噪音,应改为短暂的「已保存」状态,而不是再拦一层。表单里改了又改回原值,脏标记必须清零,否则提示撒谎。只读查看没有差额,返回不应弹窗。关闭整个应用与在应用内切记录的代价不同:前者恢复成本高,提示更值得;后者若有自动草稿,用「已为你保存草稿」替换拦截更好。多人同时写时,离开提示管的是自己的未提交缓冲,不是别人已经写入的版本——那是冲突,不是脏状态。
怎么落地
- 仅在本地与已保存版本有差额时拦截离开;提供三条路:保存并离开、丢弃改动、留下继续改。不要只有「确定 / 取消」。
- 拦截同时回显将丢失的范围(标题、未保存的段落数),避免空泛的「你有未保存的更改」。
- 自动保存已成功清零差额后,离开不再弹窗;保存失败时把拦截文案改成「尚未保存成功」,而不是假装还有选择。
- 验证:改一段文字后点返回,看是否出现带范围说明的三项选择;把文字改回原样再返回,不应再拦。再安排一次自动保存成功后的离开,确认此时无提示。