【问题标题】:Focus on keyboard tab专注于键盘选项卡
【发布时间】:2016-05-05 05:33:20
【问题描述】:

我正在尝试使用嵌套的子菜单项制作可访问的导航菜单,我遇到的问题是,虽然通过导航键突出显示所有内部链接,但它不会触发下拉菜单的显示;我不确定这是否是由于未能触发焦点造成的,尽管我怀疑是这样。

html 大致如下:

<ul class="sf-menu">
 <li> Link </li>
 ...
 <li> Link
   <ul>
    <li> inner link </li>
    ...
   </ul>
 </li>

那么我的 jQuery 是:

$( "ul.sf-menu li").focus(function(){
 this.toggleClass("over");
});
$( "ul.sf-menu li ul").focus(function(){
 this.toggleClass("over");
});

over 类将显示设置为阻止。

编辑

我确实在值为 0 的列表元素上声明了选项卡索引。

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    相当肯定这不是 tab 应该做的,但你可以使用 pseado css 选择器:focus,而不是使用 jQuery 添加一个类。

    ul.sf-menu li:focus{ /* Code to fold it open */ }
    

    【讨论】:

    • 澄清制表符是为了便于访问。
    【解决方案2】:

    您应该使用focusinfocusout 事件,因为focusblur 事件不会冒泡。

    $('.item').on({
      'focusin mouseenter': function () {
        $(this).addClass('open');
      },
      'focusout mouseleave': function () {
        $(this).removeClass('open');
      }
    });
    .item > ul {
      position: fixed;
      right: 100%;
    }
    
    .item.open > ul {
      position: static;
      right: auto;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <ul>
      <li class="item">
        <a href="#">1</a>
        <ul>
          <li>
            <a href="#">1.1</a>
          </li>
          <li>
            <a href="#">1.2</a>
          </li>
        </ul>
      </li>
      <li class="item">
        <a href="#">2</a>
        <ul>
          <li>
            <a href="#">2.1</a>
          </li>
          <li>
            <a href="#">2.2</a>
          </li>
        </ul>
      </li>
    </ul>

    此外,带有display: none 的元素无法获得焦点,因此您的代码:

    $("ul.sf-menu li ul").focus(...)
    

    永远无法执行,即使您更新为使用focusin 事件。

    【讨论】:

    • 你是对的,并且已经创建了我希望的确切功能,但是它仍然无法正常工作。似乎不是关注列表元素,而是关注其中的锚标签。
    • @NathanGilford,关注列表元素有什么意义?它们是不可操作的。这些隐式打开的菜单也不是触摸屏的好选择。考虑只使用按钮来打开/关闭子菜单。
    • 我明白你的意思,不幸的是,如果我从一开始就参与了这个网站,那么那时就可以处理可访问性,我刚开始就被分配到一个制作不佳的网站。列表元素是触发现有悬停效果的原因,我只需要创建相同的焦点效果。
    • @NathanGilford,看来您要求的不仅仅是您的问题。如果存在与可接受答案相关的其他上下文,请更新您的问题以包含它。在这一点上,我提供了一个演示,应该向您展示如何编写您需要的代码,但我无意为您编写代码。
    • 相反,我认为您对网站最初应该如何编码的看法是关于我的问题是什么,您建议的修改,而语义和技术上正确并没有解决问题,并且我正在继续寻找解决方案,我不需要您或其他任何人为我编写代码,只需帮助我了解为什么我编写的代码无法按预期工作。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多