E3.02.2radio cannot deselect to empty设计

选项一旦选中不可取消至空

别名: 单选无法取消 · sticky radio · 不能点掉

概念解释

单选组一旦有了选中项,再点同一项不会把它弹回「什么都没选」。不能取消至空(cannot deselect to empty)是单选与复选框在指针行为上的分界:复选框再点一下就关掉,单选只能改选另一项。用户从复选框习惯里过来,会连点已选项,指望清空;界面若既不换项也不给反馈,人会以为点击没被收到。

这不是缺陷,是互斥集合的操作推论:空不是该控件能走到的状态。若空是合法答案,应提供一个可点的空值项,而不是让已选项支持二次点击清空。

机制

单选把「当前值」存在组上,不存在项上。点击一项是在写这个组级值;再点同一项还是在写同一个值,所以状态不变。复选框把值存在项上,二次点击是取反。两种写入位置不同,指针手势却看起来一样,于是迁移错误集中在「我想清空」。

平台控件几乎都不把二次点击解释为清空,自定义控件若偷偷支持,会和系统单选混用时打架:有的组点得掉,有的点不掉,用户无法建立稳定预测。想清空却清不掉时,人会去找组外的重置,或把已选项误认为坏掉的按钮。

边界

带「无」或「暂不选择」的显式选项,看起来像清空,其实是改选到一个有名字的值,组仍然非空。键盘上的方向键在组内移动选中项,同样走不到空;焦点可以离开,值还在。脚本在用户点第一项之前把组保持为空,这与「选中后不能点空」不冲突——空只存在于尚未写入的阶段。自定义列表若用单击选中、再单击取消,它已经不是单选,应改用可取消的选择模型并换掉圆点,以免形状承诺了清不掉的值。

怎么落地

  • 保持平台默认:已选中的圆点再点一次不变,只允许改选其他项。
  • 不要在一部分单选组上发明二次点击清空,避免和系统控件混用时预测崩溃。
  • 用户明显在连点已选项时,用短文案告诉他们改选其他项,或指向那个名叫「无」的选项。
  • 验证:让人先选一项,再要求「回到什么都没选」。若他们只能靠刷新页面做到,说明清空路径没有被设计;若二次点击居然清空了,说明控件已经不再是单选。

延伸

  • 同组E3.02.1 单选表示互斥且必须选一 · E3.02.3 需要可空时应增加显式的空选项
  • 相邻E3.01 复选框 · E3.11 默认值策略
  • 站内检索radio deselect · cannot uncheck radio · sticky selection

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/E3.02.2