繁体   English   中英

jQuery使用选项卡浏览下拉菜单链接(键盘可访问性)

[英]jQuery using tab to go through dropdown menu links (keyboard accessibility)

我有一个css菜单,希望通过键盘交互进行访问。 我希望能够通过包括子菜单链接的每个链接进行制表。

如果下拉菜单焦点移至下一个父链接下拉菜单,则上一个下拉菜单应隐藏。

更新小提琴

的HTML

<ul>
    <li class="custom-MainMenu-TopNav-li">
        <div>
            <span><a href="#">Parent link 1</a></span>
            <div>
                <ul class="custom-MainMenu-SubNav-dropdown">
                   <li><a href="#">Sub Link</a></li>
                   <li><a href="#">Sub Link</a></li>
                </ul>
            </div>
        </div>
    </li>
    <li class="custom-MainMenu-TopNav-li">
        <div>
            <span>Parent link 2</span>
            <div>
                <ul class="custom-MainMenu-SubNav-dropdown">
                   <li><a href="#">Sub Link</a></li>
                   <li><a href="#">Sub Link</a></li>
                </ul>
            </div>
        </div>
    </li>
</ul>

的JavaScript

accessibleDropdown();
    function accessibleDropdown(){

        jQuery('.custom-MainMenu-TopNav-li a').each(function(){
            jQuery(this).focus(function(){
                jQuery(this).addClass('focused');
                var menuParent = jQuery(this).parent().next().find('ul');
                jQuery(menuParent).css('display','block');
            });

            jQuery(this).blur(function(){
                jQuery(this).removeClass('focused');
            });
        });
    } 

我不确定您期望得到什么结果以及需要什么结果,但是希望这会对您有所帮助。

由于命名约定和方法,我不得不重做您的示例,但是我想这就是您想要的...

这是一个演示,以防万一... JSFiddle

的HTML

<ul class="navbar">
    <li class="navbar-item">
        <a href="javascript:;">Parent Link</a>

        <ul class="navbar-sub">
            <li class="navbar-sub-item">
                <a href="#url_redirect">One</a>
            </li>

            <li class="navbar-sub-item">
                <a href="#url_redirect">Two</a>
            </li>

            <li class="navbar-sub-item">
                <a href="#url_redirect">Three</a>
            </li>
        </ul>
    </li>

    <li class="navbar-item">
        <a href="javascript:;">Parent Link</a>

        <ul class="navbar-sub">
            <li class="navbar-sub-item">
                <a href="#url_redirect">One</a>
            </li>

            <li class="navbar-sub-item">
                <a href="#url_redirect">Two</a>
            </li>

            <li class="navbar-sub-item">
                <a href="#url_redirect">Three</a>
            </li>
        </ul>
    </li>

    <li class="navbar-item">
        <a href="javascript:;">Parent Link</a>

        <ul class="navbar-sub">
            <li class="navbar-sub-item">
                <a href="#url_redirect">One</a>
            </li>

            <li class="navbar-sub-item">
                <a href="#url_redirect">Two</a>
            </li>

            <li class="navbar-sub-item">
                <a href="#url_redirect">Three</a>
            </li>
        </ul>
    </li>

    <li class="navbar-item">
        <a href="javascript:;">Parent Link</a>

        <ul class="navbar-sub">
            <li class="navbar-sub-item">
                <a href="#url_redirect">One</a>
            </li>

            <li class="navbar-sub-item">
                <a href="#url_redirect">Two</a>
            </li>

            <li class="navbar-sub-item">
                <a href="#url_redirect">Three</a>
            </li>
        </ul>
    </li>
</ul>

的CSS

body {
    margin: 10px;
}

.navbar,
.navbar .navbar-sub {
    list-style: none;
    margin: 0;
    padding: 0;
}

.navbar > .navbar-item {
    float: left;
}

.navbar > .navbar-item:last-child {
    margin-right: 0;
}

.navbar > .navbar-item.active > .navbar-sub {
    display: block;
}

.navbar > .navbar-item a {
    text-decoration: none;
}

.navbar > .navbar-item > a {
    background-color: #999;
    padding: 10px 20px;
    color: #696969;
    display: block;
}

.navbar > .navbar-item > a:hover,
.navbar > .navbar-item > a:focus,
.navbar > .navbar-item.active > a {
    background-color: #ccc;
}

.navbar .navbar-sub {
    display: none;
}

.navbar .navbar-sub > .navbar-sub-item > a {
    color: #ccc;
    display: block;
    padding: 5px 10px;
    text-align: center;
    background-color: #696969;
}

.navbar .navbar-item.active .navbar-sub-item > a:hover,
.navbar .navbar-item.active .navbar-sub-item > a:focus {
    background-color: #999;
}

jQuery的

$('.navbar').on('mouseenter focusin', '.navbar-item > a', function () {
    $(this)
        .parent('.navbar-item')
        .addClass('active')
        .siblings('.navbar-item')
        .removeClass('active')
});

在这里你去,简单的jQuery :)

 // display drop down box when mouse is over $(".custom-MainMenu-TopNav-li a").mouseover(function(){ $(this).find(".custom-MainMenu-SubNav-dropdown").css("display", "block"); }); // hide drop down box when mouse leaves $(".custom-MainMenu-TopNav-li a").mouseleave(function(){ $(this).find(".custom-MainMenu-SubNav-dropdown").css("display", "none"); }); 

当鼠标悬停在/离开父div时,这基本上显示/隐藏了每个下拉菜单。

我认为集中显示dropbown菜单不是一个好主意,因为我相信您只能专注于某些元素(例如输入)。

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM