Accordion菜单父项转到超链接而不是展开

时间:2014-11-05 13:53:18

标签: jquery menu accordion

我使用jQuery脚本制作手风琴菜单。除非父元素具有超链接,否则它很有效,在这种情况下,单击它会将用户带到超链接,而不是展开菜单以显示子元素。任何想法如何解决以下代码来解决这个问题?

jQuery脚本:

$( document ).ready( function( ) {
        $( '.menu li' ).each( function() {
                if( $( this ).children( 'ul' ).length > 0 ) {
                        $( this ).addClass( 'parent' );     
                }
        });

        $( '.menu li.parent > a' ).click( function( ) {
                $( this ).parent().toggleClass( 'active' );
                $( this ).parent().children( 'ul' ).slideToggle( 'fast' );
        });

        $( '#all' ).click( function() {

            $( '.menu li' ).each( function() {
                $( this ).toggleClass( 'active' );
                $( this ).children( 'ul' ).slideToggle( 'fast' );
            });
        });

});

HTML标记:

<div class="menu">
    <ul>
        <li><a href="http://www.google.com">Menu item 1</a>
            <ul>
                <li><a>Menu item 1.1</a></li>
                <li><a>Menu item 1.2</a>
                    <ul>
                        <li><a>Menu item 1.2.1</a></li>
                        <li><a>Menu item 1.2.2</a></li>
                        <li><a>Menu item 1.2.3</a></li>
                    </ul>
                </li>
                <li><a>Menu item 1.3</a></li>
            </ul>
        </li>
    </ul>
</div>

CSS:

a
    {
        cursor: pointer;
    }

.menu ul 
    {
        list-style: none outside none;
    }

.menu li a 
    {
        line-height: 25px;
    }

.menu > ul > li > a 
    {
        color: #3B4C56;
        display: block;
        font-weight: normal;
        position: relative;
        text-decoration: none;
    }

.menu li.parent > a 
    {
        padding: 0 0 0 28px;
    }

.menu li.parent > a:before 
    {
        background-image: url("../images/plus_minus_icons.png");
        background-position: 25px center;
         content: ""; 
        display: block;
        height: 21px;
        left: 0;
        position: absolute;
        top: 2px;
        vertical-align: middle;
        width: 23px;
    }

.menu ul li.active > a:before 
    {
        background-position: 0 center;
    }

.menu ul li ul 
    {
        border-left: 1px solid #D9DADB;
        display: none;
        margin: 0 0 0 12px;
        overflow: hidden;
        padding: 0 0 0 25px;
    }

.menu ul li ul li 
    {
        position: relative;
    }

.menu ul li ul li:before 
    {
        border-bottom: 1px dashed #E2E2E3;
        content: "";
        left: -20px;
        position: absolute;
        top: 12px;
        width: 15px;
    }

3 个答案:

答案 0 :(得分:1)

在点击活动中使用event.preventDefault()

来自文档:

  

例如,单击的锚点不会将浏览器带到新的URL。

http://api.jquery.com/event.preventdefault/

答案 1 :(得分:1)

如果链接永远不可点击,你可以试试这样的事情:

$( '.menu li.parent > a' ).click( function( event ) {
      event.preventDefault(); //this prevent the Link from redirecting
      $( this ).parent().toggleClass( 'active' );
      $( this ).parent().children( 'ul' ).slideToggle( 'fast' );
 });

如果重定向仍然有效,请添加

window.location.href = $(this).attr('href');

扩展手风琴后。

答案 2 :(得分:1)

您需要做的是阻止使用event.preventDefault()触发锚的默认操作。

$( '.menu li.parent > a' ).click( function( event ) {
    event.preventDefault();

    $( this ).parent().toggleClass( 'active' );
    $( this ).parent().children( 'ul' ).slideToggle( 'fast' );
});