jquery 聚焦在 accordion 上时无法使用箭头键(Wordpress)

lf3rwulv  于 2023-01-12  发布在  jQuery
关注(0)|答案(1)|浏览(158)

我还在学习如何编写可访问性代码,我正在开发的这个wordpress网站上遇到了一堵墙,它是由以前的开发人员开发的,我们网站上有一个页面,当用Tab键聚焦时,它的 accordion 项目最终会禁用箭头键的任何移动(具体来说,使用向上和向下箭头键滚动页面)。当我用Tab键经过 accordion 项目时,我可以再次使用箭头键滚动。
我注意到html元素的属性会根据所关注的内容而变化:当箭头键还能用的时候data-whatelement="button",当它们不能用的时候data-whatelement="a"。我不知道这是否相关。
下面是其中一个可折叠项的片段(扩展按钮包含在其中)

<div id="General" class="sidebar-anchor" style="display: block;">
    <div class="accordion-option">
        <h2 class="font-s-1-5"><span style="width:90%;word-wrap: break-word;">General</span></h2><button
            class="toggle-accordion" accordion-id="General" data-accordion="ssm-General"
            aria-label="expand/collapse General questions and answers" type="button" role="tablist"
            data-t="v84lyv-t"></button>
        <style>
            .accordion-option .toggle-accordion::before {
                content: "Expand";
            }

            .accordion-option .toggle-accordion.General::before {
                content: "Collapse";
            }
        </style>
        <ul>
            <li class="ssm-General" data-accordion="ssm-General" data-allow-all-closed="true" role="tablist"
                data-t="ard470-t">
                <div class="accordion-item" data-accordion-item="" data-parent="">
                    <a href="#" class="accordion-title" aria-controls="b4i8sa-accordion" role="tab"
                        id="b4i8sa-accordion-label" aria-expanded="false" aria-selected="false">Random Text</a>

                    <div class="accordion-content" data-tab-content="" role="tabpanel"
                        aria-labelledby="b4i8sa-accordion-label" aria-hidden="true" id="b4i8sa-accordion">
                        <div class="panel-body">
                            <p>Random Text</p>
                        </div>
                    </div>
                </div>
            </li>
            <li class="ssm-General" data-accordion="ssm-General" data-allow-all-closed="true" role="tablist"
                data-t="je376n-t">
                <div class="accordion-item" data-accordion-item="" data-parent="">
                    <a href="#" class="accordion-title" aria-controls="2lmfgr-accordion" role="tab"
                        id="2lmfgr-accordion-label" aria-expanded="false" aria-selected="false">Random text</a>

                    <div class="accordion-content" data-tab-content="" role="tabpanel"
                        aria-labelledby="2lmfgr-accordion-label" aria-hidden="true" id="2lmfgr-accordion">
                        <div class="panel-body"></div>
                    </div>
                </div>
            </li>
            <li class="ssm-General" data-accordion="ssm-General" data-allow-all-closed="true" role="tablist"
                data-t="c1olgt-t">
            </li>
        </ul>
    </div>
</div>

我想这可能与JS的编码方式有关,但对我来说,JS似乎相对简单,不会对阻塞箭头函数有任何影响。是否有一个属性或类被添加,以某种我不知道的方式进行干扰?
以下是相关JS,供参考:

//Expand All and Collapse All functions for Qs and As
jQuery(function(){
  jQuery(document).on('click', '.toggle-accordion', function(){
      var accordionId = jQuery(this).attr("accordion-id");
      var accordionData = jQuery(this).attr("data-accordion");
      
      var classID = "."+ accordionData;
      jQuery(this).toggleClass(accordionId);
      triggerAccordions = document.querySelectorAll("."+accordionId);
      console.log(triggerAccordions.length);
      if (triggerAccordions.length == 0) {
        collapseAll(classID);
      } else {
        expandAll(classID);
      }
  });

  function collapseAll($class) {
    jQuery($class).each(function () {
      var $acc = jQuery(this);
      var $openSections = $acc.find(".accordion-item.is-active .accordion-content");
      $openSections.each(function (i, section) {
        $acc.foundation("up", jQuery(section));
      });
    });
  };

  function expandAll($class) {
    jQuery($class).each(function () {
      var $acc = jQuery(this);
      var $openSections = $acc.find(".accordion-item .accordion-content");
      $openSections.each(function (i, section) {
        $acc.foundation("down", jQuery(section));
      });
    });
  };
});
zour9fqk

zour9fqk1#

这不是很清楚你在问什么,所以让我提供一些 accordion 的信息,以确保我们都在同一页上。
一个accordion可以有多个展开/折叠的部分。一个展开的部分是否折叠前一个展开的部分由开发人员决定。一些可折叠面板允许打开多个部分,而另一些只允许打开一个部分。
当您有多个部分时(理论上,您可以有一个只有一个可展开部分的可折叠面板,但这通常称为disclosure widget,因此本质上,一个可折叠面板是多个显示小部件),您可以将整个可折叠面板视为一个制表位,或者您可以将可折叠面板中的每个部分视为一个制表位。
从用户体验的Angular 来看,用户更了解使用Tab键而不是使用箭头键在元素之间导航,但您必须进行用户测试以确定哪一种最适合您。
在任何情况下,如果你把整个可折叠面板看作一个制表位,那么向上/向下箭头键通常用于在可折叠面板部分之间移动焦点,类似于radio group的工作方式,在前面提到的设计规范中,你会看到箭头键的实现是可选的。
等级库中的example使用选项卡在各部分之间移动。
暂时忽略折叠键,浏览器中的箭头键通常只是滚动页面,上/下用于垂直滚动,左/右用于水平滚动。
现在,说了这么多,你的一句话说不通:
当我跳过折叠式项目时,我可以再次使用箭头键移动。
当您跳过折叠面板,使您的焦点现在位于与折叠面板不关联的交互式元素(链接、按钮等)上时,您可以使用箭头键移动是什么意思?您是说您可以使用箭头键导航到不同的交互式元素?

相关问题