返回知识库

界面与交互 · 操作与输入

复选框Checkbox

可多选的勾选框,选项之间互不冲突;父项「全选」会在全选 / 半选 / 未选三态间随子项联动。

勾一勾,看父项在全选 / 半选 / 未选间切换

批量选择要归档的文件。勾或取消任意一行,父项「全选」、计数 chip 和主操作「归档所选」会同步变化——半选是复选框最关键的状态。

场景:批量勾选要归档的文件。勾或取消任意一行,看父项「全选」、计数 chip 和主操作「归档所选」如何同步变化——结果长在物件上,不只靠底部说明。

选择要归档的文件(共 4 项)

已选数量2/4父项状态半选主操作可提交本次已归档0

对照提示:遮住下面这段说明,只看上面的物件——父项方块的 全选 / 半选 / 未选、每行是否带勾、计数 chip 的 N / 总数、主操作的 灰禁 / 高亮,都能直接读出当前结果。

对照:勾选 2/4,父项「全选」显示半选(indeterminate)。原因:部分选中既不是全选也不是未选,半选是独立的状态。下一步:勾完剩余项父项会切到已全选;或直接点父项一键补齐。

实验台教会你的几件事

这些状态都能在上方面板直接看到,这里只做命名和总结。

  • 多选互不冲突勾选「设计稿」不会取消「产品需求」;每项独立成立,与单选框的互斥完全相反。
  • 父项三态联动子项全勾则父项已全选;部分勾则父项半选(indeterminate);都没勾则父项未选。
  • 半选是独立状态indeterminate 既不是选中也不是未选中,要用 ref 手动设置,并用 aria-checked="mixed" 告诉读屏。
  • 父项一键全选 / 清空点父项能把剩余项一键勾上,也能一键清空;不必逐项点击。
  • 必选启停主操作据已选数量启停:0 项时禁用,≥1 项才可提交——这就是 checkbox 的必选校验。

什么时候用 checkbox,什么时候换 radio / switch

判断依据是「选项之间是否互斥、能否同时成立」。

合适多个独立项可同时成立

兴趣标签、通知渠道、批量记录;选项彼此不冲突,用户可任意组合,用 checkbox。

合适批量列表的全选 / 半选

表格、文件、购物车多条记录;父项「全选」需要反映全选、半选与未选,是 checkbox 的招牌场景。

换控件选项互斥,只能选一个

配送方式、性别、套餐等级——选一个其余自动取消,应该用单选框 radio。

换控件单个开 / 关二态设置

邮件通知、深色模式——即时生效的单个开关用 switch;checkbox 更多用于表单提交时的多选。

怎么用:从 fieldset 到半选的最短路径

让父项、子项、计数和校验绑成一组,结果长在物件本身。

  1. 用 fieldset 加 legend 给一组 checkbox 命名,例如「选择要归档的文件」;不要只靠视觉间距暗示分组。
  2. 每个 input 用 label 包裹,或用 for 关联到控件 id,让整行可点,不必精确点小方框。
  3. 父项「全选」用 ref 在部分选中时设 indeterminate 为 true,并写 aria-checked="mixed";checked 只反映是否全选。
  4. 计数 chip 显示「已选 N / 总数」并随勾选实时更新,让用户一眼知道当前量级。
  5. 必选校验:提交时若 0 项,在组旁给出可读错误并禁用主操作,不要弹窗打断。

正反例:同一个批量列表,只改父项是否同步子项

目标都是让用户准确选中要归档的文件。差别只在父项是否反映子项的真实状态。

正例父项随子项联动,半选可见,计数实时

勾掉一项,父项立刻变成半选,计数从 4/4 变 3/4,用户一眼知道没全选;点父项能一键补齐或清空,主操作按已选数量启停。

这样做
反例父项只在全选 / 未选两态横跳,没有半选

勾掉一项后父项仍显示已全选,用户以为还在全选状态,点提交才发现少归档了文件;想取消还得逐项点掉。

别这么省

快速自测

批量列表里有 12 项,用户已勾选 7 项。顶部「全选」框应显示什么状态?

继续查证

术语的技术定义和行为以这些一手或权威资料为准。

下一步学

和本知识点经常一起出现的概念。