aria-controls 究竟为用户做了什么? AJAX 使用情况如何影响它?

What exactly does aria-controls do for the user? How is it affected by AJAX usage?

我有一组选项卡,其中包含用于辅助功能支持的适当角色和属性。选项卡控件的内容通过 ajax 加载。但是加载的内容的每个包装器也有适当的选项卡窗格角色和属性。

问题是,当我 运行 使用 Chrome 辅助工具进行自动审核时,测试失败,指出所有选项卡,但当前处于活动状态的选项卡除外(因为已加载带有 ID 的包装器)。确切的错误状态:"ARIA attributes which refer to other elements by ID should refer to elements which exist in the DOM."

由于ID一旦具有相应aria-controls属性的选项卡处于活动状态就会存在,这真的是一个错误吗?或者这只是误报的情况,因为它是一个自动化测试,他们只能做这么多。

总而言之,aria-controls 是做什么的,它真的需要引用当前存在于 DOM 中的 ID 吗?

两者(带 aria-controls 的元素以及带引用 id 的元素)必须同时存在,无论是在页面呈现还是通过 JS 注入。

DOM 在用户访问控件或您的脚本触发以使其存在之前就被 UA/AT 组合解析。如果您使用 JS 注入,那么您需要确保 DOM 被重新解析。

这也适用于 aria-owns

aria-controls 为您的辅助技术提供一种移动到受控元素的方法。

如果此元素不在 DOM 中或无法访问,那么是的,这是一个错误。

我不知道以下是否适用于您的体系结构,但它可以解决错误问题: 设计选项卡,使它们在加载时都在页面中。使用绝对定位和类似 "left: -99em." 格式化那些不应显示在视口之外的内容,当显示选项卡的时间到了时,使用 AJAX 重置定位。结果是 ARIA ID 依赖项将始终有效,因为选项卡始终是 DOM.

的一部分