标准 · ARIA

状态 控件状态

aria-checked

表示复选框、单选按钮或复选式菜单项的当前选中状态。取值为 "true"、"false" 或 "mixed"。原生 HTML 复选框会自动管理此状态——仅在自定义组件上手动设置。

使用时机

适用于具有三态或二态选中语义的组件:role="checkbox"role="radio"role="menuitemcheckbox"role="menuitemradio" 以及 role="switch"。使用原生 <input type="checkbox"><input type="radio"> 时,浏览器已将选中状态暴露给辅助技术——无需再重复设置 aria-checked

与相邻状态的区别:

  • aria-checked — 用于”此选项从一组选项中被选中,通常相互独立”,适用于复选框和单选按钮。
  • aria-pressed — 用于切换按钮(如静音/取消静音)。元素在概念上是按钮,状态表示该操作当前是否处于开启状态。
  • aria-selected — 用于单选容器(如 tablistlistboxtree)内的条目。状态属于容器的选择模型,而非条目本身。

如何保持同步

有效取值为 "true""false""mixed""undefined""mixed" 仅用于汇总一组子复选框处于不一致状态的父复选框(即经典的”全选”不确定状态模式)。"undefined" 在实践中较为少见,大多数情况下使用 "false" 代替。

该属性必须如实反映用户所见的状态。无论是点击处理程序还是键盘处理程序,在更新视觉对勾的同时,必须在同一代码路径中写入新的 aria-checked 值。切勿仅通过 CSS 渲染”已选中”外观而不同步翻转该属性。

对于 radiogroup 中的 role="radio",任意时刻应有且仅有一个选项带有 aria-checked="true",其余选项必须设为 "false"(而非省略)。

常见错误

  • role="checkbox" 元素上完全省略 aria-checked——屏幕阅读器会宣读”复选框”但无法报告状态。
  • 切换 class 以显示对勾,但从不更新 aria-checked
  • 在原生 <input type="checkbox"> 上使用 aria-checked="true"——浏览器会忽略该属性,且重复的状态可能产生不一致。
  • 在单个复选框(而非汇总子项的父复选框)上设置 aria-checked="mixed"
  • 未为同组单选按钮设置 aria-checked="false"——辅助技术无法推断未选中状态。
  • aria-checkedaria-selected 混用于 listbox 选项或 tab 上。

示例

<div role="group" aria-labelledby="prefs-heading">
  <h3 id="prefs-heading">Email preferences</h3>

  <div
    role="checkbox"
    tabindex="0"
    aria-checked="false"
    onclick="toggle(this)"
    onkeydown="if (event.key === ' ') { event.preventDefault(); toggle(this); }"
  >
    Send me weekly summaries
  </div>
</div>