【问题标题】:Trying to apply keyboard navigation by 'tabbing' through menu尝试通过菜单“切换”来应用键盘导航
【发布时间】:2017-01-24 00:59:45
【问题描述】:

非常新应用“键盘导航”,从通过此菜单的制表符 (keyCode == 9) 开始.. 到目前为止,所有 $(.menuItem) 都显示关注第一个“制表符”按键,我无法在每个 li, ul 子菜单中制表符.. 帮助?

    <div class="navigation-container">
    <ul class="menu" tabindex="0">
      <li class="menuItem" tabindex="-1">About Us
        <ul class="sub-menu" tabindex="-1">
          <li tabindex="-1">
          <p>Meet The Team</p>
          </li>
          <li tabindex="-1">
          <p>Testimonials</p>
          </li>
          <li tabindex="-1">
          <p>Mission and Vision</p>
          </li>
        </ul>
      </li>
      <li class="menuItem">Resources
        <ul class="sub-menu">
          <li>
          <p>Big Island Go-Tos</p>
          </li>
          <li>
          <p>Moving To Kona 101</p>
          </li>
          <li>
          <p>Island News</p>
          </li>
        </ul>
      </li>
      <li class="menuItem">Search MLS
        <ul class="sub-menu">
          <li>
          <p>Kona Searches</p>
          </li>
        </ul>
      </li>
    </ul>
  </div>

$('.menuItem').keydown(function(e){
  if (e.which == 9) {
    $('li.menuItem').focus();
    console.log($('menuItem'));
  }
});

【问题讨论】:

    标签: jquery focus keyboard-events keycode


    【解决方案1】:

    li 元素没有获得焦点,所以你要做的是将文本放在a 中,因为锚点可以获得焦点。下面是这样做的一种方法

    $('li>a').keydown(function(e) {
      if (e.which == 9) {
        //Get the submenu
        var subMenu = $(this).next('ul');
        subMenu.addClass('open');
        //Check if you're on the last subchild and close the menu
        if ($(this).parent('li').is(':last-child:not(".menu>li>a")')) {
          $(this).parent('li').parent('.open').removeClass('open')
        }
      }
    });
    .sub-menu {
      display: none;
    }
    .sub-menu.open {
      display: block;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
    <div class="navigation-container">
        <ul class="menu">
          <li class="menuItem">
            <a href="#">About Us</a>
            <ul class="sub-menu">
              <li>
              <a href="#">Meet The Team</a>
              </li>
              <li>
              <a href="#">Testimonials</a>
              </li>
              <li>
              <a href="#">Mission and Vision</a>
              </li>
            </ul>
          </li>
          <li class="menuItem">
          <a href="#">Resources</a>
            <ul class="sub-menu">
              <li>
              <a href="#">Big Island Go-Tos</a>
              </li>
              <li>
              <a href="#">Moving To Kona 101</a>
              </li>
              <li>
              <a href="#">Island News</a>
              </li>
            </ul>
          </li>
          <li class="menuItem">
          <a href="#">Search MLS</a>
            <ul class="sub-menu">
              <li>
              <a href="#">Kona Searches</a>
              </li>
            </ul>
          </li>
        </ul>
      </div>

    【讨论】:

    • 谢谢! @Pindo,这不仅做得很好,而且你给了我很多东西。谢谢谢谢你..你会建议在达到每个子菜单的长度后使用 .hide() 作为我的下一步吗?让我开心,再次感谢。
    • @gmatsushima 如果您删除公开课程,它将隐藏该特定子菜单
    • 在一定长度后努力尝试删除类
    • 我希望循环遍历每个子菜单,一旦达到每个子菜单的长度,removeClass('open') 错误 - subMenu 超出范围或循环未达到条件$('li &gt; a').keydown(function(e){ //var sublength = $('ul.sub-menu &gt; li').length; var sub1length = $('ul#sub1length &gt; li').length; if (e.which == 9) { for (var i = 0; i &lt; sub1length; i++){ if(i &lt; 3){ var subMenu = $(this).next('ul'); subMenu.addClass('open'); } else{ console.log('help'); } } } //console.log($('ul#sub1length &gt; li').length); });
    • @gmatsushima 我已经编辑了上面的答案以删除开放:)
    猜你喜欢
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    相关资源
    最近更新 更多