【问题标题】:Enabling keyboard navigation in the Bootstrap dropdown-menu在 Bootstrap 下拉菜单中启用键盘导航
【发布时间】:2013-07-18 02:28:12
【问题描述】:

是否可以使用键盘导航到使用 Tab 的下拉菜单,并使用箭头键导航到下拉菜单的子元素?

这是我现在拥有的代码:

<input type="text" value="click tab to jump to the drop down."/>
<div class="bs-docs-example">
    <div class="dropdown clearfix">
      <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu" style="display: block; position: static; margin-bottom: 5px; *width: 180px;">
        <li><a tabindex="-1" href="#">Menu Item A</a></li>
        <li><a tabindex="-1" href="#">Menu Item B</a></li>
        <li><a tabindex="-1" href="#">Menu Item C</a></li>
        <li class="divider"></li>
        <li><a tabindex="-1" href="#">Menu Item A1</a></li>
            <li class="dropdown-submenu">
                <a tabindex="-1" href="#">Menu Item B1</a>
                <ul class="dropdown-menu">
                    <li><a tabindex="-1" href="#">You should navigate here with the keyboard.</a></li>
                    <li><a tabindex="-1" href="#">Thanks For your Help!</a></li>
                </ul>
            </li>
      </ul>
    </div>
</div>

http://jsfiddle.net/MGwVM/1/

【问题讨论】:

  • 我看到你在我回答后编辑了。你看到我的回答了吗?
  • 迟到的评论,但是......我认为现在我们可以将 role="menu" 添加到 ul.dropdown-menu 和 role="navigation" 到 div.navbar (在两个引导程序 2和 3) 这似乎可以很好地实现键盘可访问性。但我认为您问题中的 html 标记不遵循引导示例...

标签: twitter-bootstrap accessibility keyboard-navigation


【解决方案1】:

更新

Bootstrap 现在支持标准的向上/向下键。

因此,如果您希望 Tab 激活下拉菜单,只需 get the key code (9) 并执行以下操作:

$('.input-group input').keydown(function(e){
    if(e.which == 9){ // tab
        e.preventDefault();
        $(this).parent().find('.dropdown-toggle').click();
        $(this).parent().find('.dropdown-menu a:first').focus();
    }
});

如果您想在用户关注下拉菜单项时添加更多功能:

$('.dropdown-menu a').keydown(function(e){
    switch(e.which){
        case 36: // home
            e.preventDefault();
            $(this).closest('.dropdown-menu').find('a:first').focus();
            break;
        case 35: // end
            e.preventDefault();
            $(this).closest('.dropdown-menu').find('a:last').focus();
            break;
    }
});

请参阅this JSFiddle 以获取演示。

【讨论】:

  • home/end 和字母导航丢失 :-)
  • @xamiro-dev 查看更新的答案。您可以通过finding the keycode添加字母导航并添加开关盒。
【解决方案2】:

很好的例子。

但是,你为什么设置setTimeout? 有什么具体原因?

setTimeout(function(){
    $(".search-option:first").focus();
},100);

我做了同样的例子,模拟一个输入选择框,没有超时。 Check this out.

【讨论】:

  • 这可能是当时浏览器的一个怪癖。
  • @Emzor 如果您有兴趣,代码现已更新。
  • @rybo111 非常感谢您提供的信息 :-)
猜你喜欢
  • 1970-01-01
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-10
  • 2017-07-01
相关资源
最近更新 更多