E3.12.2tri-state not a user-set value设计

三态不可用于用户直接输入

别名: 不确定态不可点选 · mixed not input · 三态不是选项

概念解释

不确定态只能由系统根据子项计算出来,不能当作用户可挑选的第三档。人去点一个混合着的父级时,动作应把它收成全勾或全空,而不是把「混合」当成我想要的值留下。三态不是输入(tri-state is not input)禁止把「是 / 否 / 不确定」做成用户可点的三种方框,去采集一个名叫不确定的答案。那是把摘要符号误当成量表。

用户真的需要「未知 / 不适用」时,应使用显式的空选项、额外的单选或单独的「未知」控件,而不是复用混合横线。

机制

混合态没有稳定的操作语义。点下去,系统无法知道人是想「把其余子项也勾上」、还是「把已勾的清掉」、还是「保持混合」。平台惯例通常是混合 → 全勾 → 全空 → 全勾循环,把混合当作一个短暂的路过态,不允许在点击后停在混合。若点击后仍显示混合,用户会认为点击没生效。

把三态开放成输入,还会污染数据。混合在模型里本应是派生值,一经用户写入,派生和事实可能打架:子项稍后变化,父级却钉在用户点过的「不确定」上。摘要不再能从子项重算,折叠视图开始撒谎。

边界

无障碍角色里,复选框可以报 mixed,那是把计算态读出来,不是提供第三种可设值。某些专业工具用「是 / 否 / 未知」三档采集,那是三个具名选项,应用单选或下拉,方框加横线会让人以为未知等于部分选中。点击混合父级时,若子项里有禁用项,全勾不能扫进禁用项,循环规则要跳过它们并说清,否则用户会以为点了全勾却看见仍是混合——那是禁用造成的派生混合,仍不是让用户「输入混合」。

怎么落地

  • 混合态只读派生:子项一变就算,用户点击只在全与空之间收束。
  • 需要「未知」时做成具名选项,不要复用父级横线。
  • 把点击循环写进交互说明:混合到全、全到空、空到全;不要在循环里提供「设为混合」。
  • 验证:在混合父级上点一下,状态应变明确,子项跟着收束。若仍停在横线,或表单把 mixed 当作可提交值存下来,输入模型就错了。

延伸

  • 同组E3.12.1 父级复选框的部分选中需要第三态 · E3.12.3 三态的视觉表达需与选中态明确区分
  • 相邻E3.02 单选按钮 · E3.16 树形多选与父子联动
  • 站内检索indeterminate not input · mixed derived state · checkbox click cycle

同组卡片

快捷操作

分享

分享当前页面

ios_share

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