Jquery - 点击下拉菜单

时间:2014-02-24 06:27:47

标签: javascript jquery drop-down-menu html.dropdownlistfor cascadingdropdown

我对jquery比较新,我正在寻求帮助。目的是单击附加到ul的列表项,并在任何其他列表项消失时显示。只有活动的是可见的

我遇到的问题是,当我点击另一个列表项时,活动的一个消失(按预期),但它不会显示另一个,它仍然是隐藏的。我正在寻找一种方法来揭示列表,同时隐藏那些不活跃的列表。

我上传了我的问题:http://jsfiddle.net/CbU4d/

HTML:

<div id="secondary-nav"><!--secondary-nav-->    
    <ul>
        <li><a href="#.html">Current Article</a>
            <ul>
                <li><a href="#.html">Example 1</a></li>
            </ul>
        </li>
        <li class="active"><a href="#.html">Past Articles</a>
            <ul>
                <li><a href="#.html">Example 1</a></li>
                <li><a href="#.html">Example 2</a></li>
                <li><a href="#.html">Example 3</a></li>
            </ul>
        </li>
    </ul>   
</div><!--/secondary-nav-->

的CSS:

#secondary-nav {
    float:left;
    height:auto;
    width:23%; /*210px*/
    border-right:2px solid #000;
    position:relative;
}

/*heading styles*/
#secondary-nav ul li {
    padding: 0 10px;
    list-style-type: none;
}

#secondary-nav ul li a {
    font-family:TrajanPro;
    font-size:1em;
    line-height: 32px;
    color:#000;
}

/*links*/
#secondary-nav ul ul li a {
    display: block;
    font-family:TrajanPro;
    font-size:0.9em;
    line-height: 27px;
    text-decoration: none;
    color:#000;
    transition: all 0.15s;
}

#secondary-nav ul li a:hover {
    display:block;
    color:#af2931;
    text-decoration:underline;
}

#secondary-nav ul ul {
    display: none;
}

#secondary-nav li.active ul {
    display: block;
}
/css

jquery使用1.7.1

$(document).ready(function(){
    $("#secondary-nav ul").click(function(){
        //slide up all the link lists
        $("#secondary-nav ul ul").slideUp();
        //slide down the link list below the h3 clicked - only if its closed
        if(!$(this).next().is(":visible"))
        {
            $(this).next().slideDown();
        }
    })
})

2 个答案:

答案 0 :(得分:2)

尝试

$("#secondary-nav ul ul").slideToggle();

Demo

答案 1 :(得分:-1)

我通过做两处修改来实现它(我认为):

  1. 将第2行的选择器更改为:

    "#secondary-nav ul li"
    

    这意味着该事件将附加到您单击的列表项,而不是整个列表。

  2. 删除第6行的if语句。由于我们隐藏了上一行中第二级ul所有,我们无需检查是否它是可见的;我们知道不是。

  3. 将第6行更改为:

    $(this).children('ul').slideDown();
    

    这是因为您要展开的ul是您点击的li的孩子,而不是兄弟姐妹。

  4. Here's my fixed jsFiddle

    编辑:如果您想要在单击已经展开的那个时停止隐藏并重新显示,只需将其放在处理程序的顶部:

    if ($(this).children('ul').is(':visible')){
        return
    }