jQuery菜单在子菜单点击时折叠

时间:2013-06-07 07:53:41

标签: jquery slide collapse submenu

我正在尝试使用jquery幻灯片菜单,但我现在没有想法。如何在子菜单条目上进行切换时如何停止菜单折叠?

这是我到目前为止所获得的 - js-part,导航代码,以及最后相关的css部分:

    <script type="text/javascript">
        $(document).ready(function() {
         $('ul .sub').hide();
         $("li:has(.sub)").click(function() {
            $("ul", this).toggle('slow');
        });
    </script>

    <nav id="nav" class="nav">
        <ul>
            <li class="current"><a href="#a">menu1</a></li>
            <li><a href="#b">menu2</a>
                <ul class="sub">
                    <li><a href="#ba">sub2a</a></li>
                    <li><a href="#bb">sub2b</a></li>
                    <li><a href="#bc">sub2c</a></li>
                </ul>
            </li>
            <li><a href="#c">menu3</a></li>
            <li><a href="#d">menu4</a>
                <ul class="sub">
                    <li><a href="#da">sub4a/a></li>
                        <li><a href="#db">sub4b</a></li>
                </ul>
            </li>
        </ul>
    </nav>

这是css:

 .nav li {
    list-style:none;
    line-height: 30px;  
 }

 .nav a:link, .nav a:visited{
    color:#333 !important;
    text-decoration:none;
 }

 .nav a:hover {
    color:#9bb710;
    text-decoration:none;
 }

 .current a:link, .current a:hover, .current a:visited {
    color:#9bb710 !important;
 }

 .sub {
    color:#333 !important;
    text-decoration:none;
    font-size: 14px;
    margin-left: 15px;
    line-height: 22px;
 }

3 个答案:

答案 0 :(得分:2)

由于事件传播而发生这种情况:当您点击子项目时,“点击”事件会传播到容器“li”。

您可以通过添加以下内容来阻止此操作:

$("li").click(function(event) {
    event.stopPropagation();
});

这是一个jsfiddle示例:http://jsfiddle.net/EWXPy/

答案 1 :(得分:1)

您忘记了脚本中的右括号:

必须是这样的:

<script type="text/javascript">
        $(document).ready(function() {
         $('ul .sub').hide();
         $("li:has(.sub)").click(function() {
            $("ul", this).toggle('slow');
        });
});
</script>

答案 2 :(得分:0)

$("li:has(.sub)").click(function(e) {
    if ($(e.target).parents('.sub').length) return false;

    $("ul", this).toggle('slow');
});