E3.12.2tri-state not a user-set value设计
三态不可用于用户直接输入
别名: 不确定态不可点选 · mixed not input · 三态不是选项
概念解释
不确定态只能由系统根据子项计算出来,不能当作用户可挑选的第三档。人去点一个混合着的父级时,动作应把它收成全勾或全空,而不是把「混合」当成我想要的值留下。三态不是输入(tri-state is not input)禁止把「是 / 否 / 不确定」做成用户可点的三种方框,去采集一个名叫不确定的答案。那是把摘要符号误当成量表。
用户真的需要「未知 / 不适用」时,应使用显式的空选项、额外的单选或单独的「未知」控件,而不是复用混合横线。
机制
混合态没有稳定的操作语义。点下去,系统无法知道人是想「把其余子项也勾上」、还是「把已勾的清掉」、还是「保持混合」。平台惯例通常是混合 → 全勾 → 全空 → 全勾循环,把混合当作一个短暂的路过态,不允许在点击后停在混合。若点击后仍显示混合,用户会认为点击没生效。
把三态开放成输入,还会污染数据。混合在模型里本应是派生值,一经用户写入,派生和事实可能打架:子项稍后变化,父级却钉在用户点过的「不确定」上。摘要不再能从子项重算,折叠视图开始撒谎。
边界
无障碍角色里,复选框可以报 mixed,那是把计算态读出来,不是提供第三种可设值。某些专业工具用「是 / 否 / 未知」三档采集,那是三个具名选项,应用单选或下拉,方框加横线会让人以为未知等于部分选中。点击混合父级时,若子项里有禁用项,全勾不能扫进禁用项,循环规则要跳过它们并说清,否则用户会以为点了全勾却看见仍是混合——那是禁用造成的派生混合,仍不是让用户「输入混合」。
怎么落地
- 混合态只读派生:子项一变就算,用户点击只在全与空之间收束。
- 需要「未知」时做成具名选项,不要复用父级横线。
- 把点击循环写进交互说明:混合到全、全到空、空到全;不要在循环里提供「设为混合」。
- 验证:在混合父级上点一下,状态应变明确,子项跟着收束。若仍停在横线,或表单把 mixed 当作可提交值存下来,输入模型就错了。