首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jquery选项卡“不能嵌套交互式控件”

jquery选项卡“不能嵌套交互式控件”
EN

Stack Overflow用户
提问于 2022-01-26 00:10:55
回答 1查看 754关注 0票数 1

我使用jquery选项卡。样本代码:

代码语言:javascript
复制
<ul role="tablist">
 <li role="tab"><a class="label" href="#tabs-1" aria-label="Description tab">Description</a></li>
 <li role="tab"><a class="label" href="#tabs-2" aria-label="Reviews tab">Reviews</a></li>
 <li role="tab"><a class="label" href="#tabs-3" aria-label="Credits tab">Credits</a></li>
 <li role="tab"><a class="label" href="#tabs-4" aria-label="Cataloging tab">Cataloging</a></li>
</ul>

axe可访问性检查器标记此代码的“严重”问题:“不能嵌套交互控件”,并解释“不得具有可聚焦的后代”,并引用准则WCAG4.1.2。

据我所知,问题是在语言中有一个链接。从一个关于斧头核心(https://github.com/dequelabs/axe-core/issues/601)的Github讨论中,列表项中的可点击链接会导致屏幕阅读器出现问题。

但这似乎是jquery选项卡小部件的标准用法。如何更改选项卡小部件代码以使其可访问?

EN

回答 1

Stack Overflow用户

发布于 2022-01-26 09:23:28

<ul role="tablist">中的项目将被添加到tabindex="0"等以使它们具有可聚焦性(实际的li,而不是链接),然后锚点应该将tabindex="-1"添加到其中。

这个想法是链接是一个退路,因为如果JS失败了,这就是为什么它首先包含在其中,而不仅仅是纯文本。

但是,这确实会导致交互元素嵌套,因为现在列表项上有tabindex="0" (使其“交互式”/可聚焦),然后在列表项中有一个链接。

他们将tabindex="-1"添加到链接中,以便将其从焦点顺序中删除,但是一些屏幕阅读器/浏览器组合仍然会选择这个链接,这就是为什么它会被标记。

因此,有一个解决办法,但您需要自己实现它。

首先,将role="none presentation"添加到链接中:

代码语言:javascript
复制
<li role="tab"><a class="label" href="#tabs-1" role="none presentation">Description</a></li>

这表明,就辅助技术而言,这个锚应该被视为<div><span> (它消除了所有的语义含义)。

其次,(但您必须检查它是否与jQuery一起工作)是通过JS href从链接中删除属性(因此只有在Tab组件初始化后才会删除它)。

如果在完成此操作后检查元素(忽略添加的任何类等),您应该得到以下结果:

代码语言:javascript
复制
<li role="tab"><a class="label" role="none presentation">Description</a></li>

如果JS工作并正确加载,它将不再是一个可聚焦的项,但如果JS未能加载,它将优雅地后退。

还请注意,我删除了您的aria-label,因为您使用的role="tab"已经告诉屏幕阅读器它是一个选项卡,所以您的标签是不需要的。

因此,总结如下:

<li>

  • remove JavaScript.

  • remove

  • 通过aria-label (与问题无关)的链接向role="none presentation"添加href属性

这应该使jQuery中的选项卡尽可能可访问,但是它可能还存在其他问题,所以我不能说它是否是可访问的!

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70857293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档