jquery - Accordion 菜单,第一次单击时展开,如果子菜单展开则转到 URL

标签 jquery url accordion expand preventdefault

我有一个扩展菜单的脚本,但我想要它做的是在第一次单击时展开,然后一旦子菜单展开,我希望扩展链接实际转到指定的 URL,如果再次点击。这是我到目前为止的代码:

jQuery

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

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

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

            });

    });

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;
    }

JSFIDDLE

最佳答案

根据@的建议更新dippas

http://jsfiddle.net/g3o64ve7/3/

使用ishidden

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

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

            if($(this).next('ul').is(':hidden'))
            {
                event.preventDefault();            

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

});

关于jquery - Accordion 菜单,第一次单击时展开,如果子菜单展开则转到 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27398911/

相关文章:

javascript - 单击按钮后使重叠的 div 动画到前面

javascript - 如何为鼠标悬停功能添加延迟?

html - 找不到 URL 错误,而它确实存在

jquery - 单击新选项卡时关闭嵌套的 Jquery Accordion 菜单

javascript - 从另一页链接到Bootstrap 3 Accordion 内的DIV

javascript - 使用星号隐藏密码字段

jquery - 改变jquery中按钮的宽度

php - 如何使用 PHP 和 Regex 提取具有特定域名的链接?

ajax - 是否将 URL 的 anchor 部分发送到 Web 服务器?

css - Accordion input::before 伪元素