ARIA:radiogroup 角色
radiogroup 角色是一组 radio 按钮。
描述
无线电组是描述一组相关radio选项的集合。radiogroup 是一种select列表,在任何给定时间只能选择一个条目或radio。
当使用 HTML 本机输入单选按钮,<input type="radio">时,当组中的每个输入单选按钮都具有相同的name时,这些单选按钮将被分组。一旦建立了一组同名输入单选按钮,选择该组中的任何输入单选按钮都会自动取消选择该组中当前选中的任何输入单选按钮。虽然这会将单选按钮关联在一起,但要将单选按钮组明确地公开为radiogroup,请设置 ARIA 角色。
建议使用同名 HTML 输入单选按钮创建无线电组,但是,如果您必须使用 ARIA 角色和属性而不是语义 HTML 表单控件,则自定义radio按钮可以并且应该像本机 HTML 单选输入按钮一样工作。
当使用非语义元素作为单选按钮时,您必须确保您的用户一次只能从组中选择一个单选按钮。当组中的一个项目被选中时,其aria-checked属性设置为true,先前选中的项目将被取消选中,其aria-checked属性变为false。aria-checked属性设置在关联的radio角色上,而不是在radiogroup本身上。
一些radiogroup实现使用所有按钮处于未选中状态来初始化集合。一旦radiogroup中的radio被选中,通常不可能返回到所有未选中状态。
radiogroup必须具有可访问的名称,方法是通过aria-labelledby引用的可见标签或使用aria-label指定的标签。如果元素提供了有关无线电组的其他信息,则这些元素将通过aria-describedby属性由radiogroup元素引用。
关联的 WAI-ARIA 角色、状态和属性
radio角色-
一组可选中按钮中的一个,位于
radiogroup中,其中在任何给定时间只能选中一个按钮。 aria-labelledby/aria-label-
radiogroup必须具有可访问的名称,方法是通过aria-labelledby引用的可见标签或使用aria-label指定的标签。 aria-describedby-
对提供有关
radiogroup的其他信息的元素的引用 aria-required-
指示在提交表单之前,组中的一个
radio必须设置aria-checked="true"。必需状态是在radiogroup元素上指定的,而不是在radio元素之一上指定的,这与使用 HTML 单选按钮时不同,在 HTML 单选按钮中,required属性直接设置在一个或多个单选<input>元素上。 aria-errormessage-
标识为
radiogroup提供错误消息的元素(如果有错误)。该消息在不相关时应隐藏。
键盘交互
对于不在toolbar中的radiogroup中的radio按钮,必须支持以下键盘交互
- Tab 和 Shift + Tab
-
将焦点移入和移出
radiogroup。当焦点移入radiogroup时,如果单选按钮被选中,则焦点将设置在选中的按钮上。如果没有任何单选按钮被选中,则焦点将设置在组中的第一个单选按钮上。 - 空格
-
如果聚焦的单选按钮尚未选中,则选中它。
- 右箭头 和 下箭头
-
将焦点移动到组中的下一个单选按钮,取消选择先前聚焦的按钮,并选中新聚焦的按钮。如果焦点位于最后一个按钮上,则焦点将移动到第一个按钮。
- 左箭头 和 上箭头
-
将焦点移动到组中的上一个单选按钮,取消选择先前聚焦的按钮,并选中新聚焦的按钮。如果焦点位于第一个按钮上,则焦点将移动到最后一个按钮。
使用方向键在工具栏元素之间导航。当一个radiogroup嵌套在工具栏内时,用户需要能够在所有工具栏元素(包括单选按钮)之间导航,而无需更改选中的单选按钮。因此,当使用方向键在toolbar中的radiogroup中导航时,选中的按钮不会改变。相反,在toolbar内,空格键和回车键会选中获得焦点的radio按钮(如果该按钮尚未选中),而Tab键则用于在toolbar中进出焦点。
所需的 JavaScript 功能
所需的 CSS 功能
示例
使用非语义 ARIA 角色而不是语义 HTML 的radiogroup的基本设置如下所示
<div role="radiogroup" aria-labelledby="question">
<div id="question">Which is the best color?</div>
<div id="radioGroup">
<p>
<span
id="colorOption_0"
tabindex="0"
role="radio"
aria-checked="false"
aria-labelledby="purple"></span>
<span id="purple">Purple</span>
</p>
<p>
<span
id="colorOption_1"
tabindex="-1"
role="radio"
aria-checked="false"
aria-labelledby="aubergine"></span>
<span id="aubergine">Aubergine</span>
</p>
<p>
<span
id="colorOption_2"
tabindex="-1"
role="radio"
aria-checked="false"
aria-labelledby="magenta"></span>
<span id="magenta">Magenta</span>
</p>
<p>
<span
id="colorOption_3"
tabindex="-1"
role="radio"
aria-checked="false"
aria-labelledby="all"></span>
<span id="all">All of the above</span>
</p>
</div>
</div>
这可以使用语义 HTML 来编写,这不需要 CSS 或 JavaScript
<fieldset>
<legend>Which is the best color?</legend>
<p>
<input name="colorOption" type="radio" id="purple" />
<label for="purple">Purple</label>
</p>
<p>
<input name="colorOption" type="radio" id="aubergine" />
<label for="aubergine">Aubergine</label>
</p>
<p>
<input name="colorOption" type="radio" id="magenta" />
<label for="magenta">Magenta</label>
</p>
<p>
<input name="colorOption" type="radio" id="all" />
<label for="all">All of the above</label>
</p>
</fieldset>
在此<fieldset>示例中,虽然role="radiogroup"不是必需的,但要将此分组显式地宣布为radiogroup,请包含 ARIA 角色。
规范
| 规范 |
|---|
| 可访问的富互联网应用程序 (WAI-ARIA) # radiogroup |
| 未知规范 |