javascript - jQuery Accordion 导航菜单

标签 javascript jquery html css

我有一个 jquery 垂直 Accordion 导航菜单。一切正常,但当我展开一个列表项时,如果我单击一个列表项,它就会隐藏。

代码如下:

HTML :

<div class="sidebar">
        <ul>
            <li>
                <a href="javascript:void(0)">Item 1 <i class="sidebar-icon glyphicon glyphicon-chevron-left"></i></a>
                <ul class="sub-menu">
                    <li>
                        <a href="javascript:void(0)">Sub Item 1</a>
                    </li>
                    <li>
                        <a href="javascript:void(0)">Sub Item 2</a>
                    </li>
                </ul>
            </li>
            <li>
                <a href="javascript:void(0)">Item 2 <i class="sidebar-icon glyphicon glyphicon-chevron-left"></i></a>
                <ul class="sub-menu">
                    <li>
                        <a href="javascript:void(0)">Sub Item 1</a>
                    </li>
                    <li>
                        <a href="javascript:void(0)">Sub Item 2</a>
                    </li>
                    <li>
                        <a href="javascript:void(0)">Sub Item 3</a>
                    </li>
                </ul>
            </li>
            <li>
                <a href="javascript:void(0)">Item 3 <i class="sidebar-icon glyphicon glyphicon-chevron-left"></i></a>
                <ul class="sub-menu">
                    <li>
                        <a href="javascript:void(0)">Sub Item 1</a>
                    </li>
                    <li>
                        <a href="javascript:void(0)">Sub Item 2</a>
                    </li>
                    <li>
                        <a href="javascript:void(0)">Sub Item 3</a>
                    </li>
                </ul>
            </li>
            <li>
                <a href="javascript:void(0)">Item 4 <i class="sidebar-icon glyphicon glyphicon-chevron-left"></i></a>
                <ul class="sub-menu">
                    <li>
                        <a href="javascript:void(0)">Sub Item 1</a>
                    </li>
                    <li>
                        <a href="javascript:void(0)">Sub Item 2</a>
                    </li>
                </ul>
            </li>
        </ul>
    </div>

JS :

function toggleAccordion(li) {
    if(li.hasClass('active')) {
        li.removeClass('active');
        $('.sub-menu', li).slideUp();
        $('i', li).removeClass('glyphicon-chevron-down').addClass('glyphicon-chevron-left');
    }
    else {
        $('.sidebar > ul > li.active .sub-menu').slideUp();
        $('li i').removeClass('glyphicon-chevron-down').addClass('glyphicon-chevron-left');
        $('li.active').removeClass('active');
        li.addClass('active');
        $('.sub-menu', li).slideDown();
        $('i', li).removeClass('glyphicon-chevron-left').addClass('glyphicon-chevron-down');
    }
};

$('.sidebar > ul > li').click(function(ev) {
    ev.stopPropagation();
    toggleAccordion($(this));
});
$('.sidebar > ul > li > a').click(function(ev) {
    ev.stopPropagation();
    toggleAccordion($(this).parent());
});

我确实希望它在单击已展开的列表项时折叠起来。

我希望它在整行中都可以点击。

如果我将点击功能设置为 .sidebar ul li a 它工作正常。但我只能单击文本以获得 Accordion 效果。

请帮帮我。

最佳答案

您没有停止从子元素传播点击事件

$('.sidebar > ul > li').click(function (ev) {
    toggleAccordion($(this));
}).find('ul').hide();

$('.sidebar li').click(function (e) {
    e.stopPropagation()
});

演示:Fiddle

关于javascript - jQuery Accordion 导航菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20207904/

相关文章:

javascript - jQuery resizing() "Containment"参数不接受数组

javascript - 未捕获的类型错误 : View is not a constructor

javascript - 在同一个 React 项目中使用两个 UI 库的缺点?

javascript - 数据库为空时获取未定义

javascript - 如何正确地将第二个变量传递给 ajax 调用

javascript - jQuery 是否会从已销毁的 DOM 内容中删除事件监听器?

javascript - 在 JavaScript 中用同一帧中的另一个对象替换一个对象?

javascript - 使用下一个和上一个按钮从 JSON 文件播放 HTML5 视频

javascript - 如何对 AJAX 调用后创建的格式化 HTML 调用 JQuery 操作?

javascript - 从 Whatsapp 测验代码更改分享数量