E2.17.2undoable field clear设计
清空动作应可撤销
别名: 清空撤销 · accidental clear · 叉掉的字找不回
概念解释
一键清空把槽里可能很长的值瞬间变成空。误触之后若剪贴板、撤销栈里都没有这份值,内容就没了。可撤销的清空(undoable field clear)要求这次删除能被系统撤销找回,或至少把旧值留在一次明确的「还原」里。它管的是清掉之后还能不能回来,不是叉何时出现,也不是它占了右侧多少宽度。
机制
清空的破坏力与值的长度成正比:地址、自我介绍、未提交的长备注,一次误触等于关窗不保存。浏览器对 input 的默认撤销有时把「清空」当成一次编辑,Ctrl+Z 能回;有的实现用脚本一次性 value="",撤销栈里没有这笔。移动端没有可靠的系统撤销,误触代价更高。人点叉的意图并不总是「我不要了」——有时是想清掉自动填充再手打,有时是误点。没有回退,唯一路径是从头写。这和破坏性操作要可逆是同一条记忆保护,只是发生在一个小叉上。
边界
故意要销毁的秘密(已显示过的一次性密码)清空后不应留在撤销里,避免下一个人 Z 回来。只把值从槽里清走、草稿已在别处自动保存时,槽内撤销失败仍可从草稿回,但要让人知道草稿在哪。协作字段里清空会影响别人正在看的值,撤销语义属于数据层,不是控件自己能保证的。空槽上本不该有清空,谈撤销没有对象。
怎么落地
- 让清空走进编辑器的撤销栈,系统撤销快捷键应能恢复刚被清的值。
- 移动端在清空后短暂提供「还原」或把旧值留在内存直到下一次编辑。
- 不要用绕过输入事件的脚本直接写空,那会丢掉撤销记录。
- 验证:填一段不愿重打的文字,点清空,立刻撤销。值应回来。再在手机上点清空,看三秒内有没有还原。脚本清空后撤销无效,就改实现,而不是加一句「请谨慎点击」。