E3.02.2radio cannot deselect to empty设计
选项一旦选中不可取消至空
别名: 单选无法取消 · sticky radio · 不能点掉
概念解释
单选组一旦有了选中项,再点同一项不会把它弹回「什么都没选」。不能取消至空(cannot deselect to empty)是单选与复选框在指针行为上的分界:复选框再点一下就关掉,单选只能改选另一项。用户从复选框习惯里过来,会连点已选项,指望清空;界面若既不换项也不给反馈,人会以为点击没被收到。
这不是缺陷,是互斥集合的操作推论:空不是该控件能走到的状态。若空是合法答案,应提供一个可点的空值项,而不是让已选项支持二次点击清空。
机制
单选把「当前值」存在组上,不存在项上。点击一项是在写这个组级值;再点同一项还是在写同一个值,所以状态不变。复选框把值存在项上,二次点击是取反。两种写入位置不同,指针手势却看起来一样,于是迁移错误集中在「我想清空」。
平台控件几乎都不把二次点击解释为清空,自定义控件若偷偷支持,会和系统单选混用时打架:有的组点得掉,有的点不掉,用户无法建立稳定预测。想清空却清不掉时,人会去找组外的重置,或把已选项误认为坏掉的按钮。
边界
带「无」或「暂不选择」的显式选项,看起来像清空,其实是改选到一个有名字的值,组仍然非空。键盘上的方向键在组内移动选中项,同样走不到空;焦点可以离开,值还在。脚本在用户点第一项之前把组保持为空,这与「选中后不能点空」不冲突——空只存在于尚未写入的阶段。自定义列表若用单击选中、再单击取消,它已经不是单选,应改用可取消的选择模型并换掉圆点,以免形状承诺了清不掉的值。
怎么落地
- 保持平台默认:已选中的圆点再点一次不变,只允许改选其他项。
- 不要在一部分单选组上发明二次点击清空,避免和系统控件混用时预测崩溃。
- 用户明显在连点已选项时,用短文案告诉他们改选其他项,或指向那个名叫「无」的选项。
- 验证:让人先选一项,再要求「回到什么都没选」。若他们只能靠刷新页面做到,说明清空路径没有被设计;若二次点击居然清空了,说明控件已经不再是单选。