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 |
未知规范 |