多级子菜单不会在点击时关闭子菜单

Posted

技术标签:

【中文标题】多级子菜单不会在点击时关闭子菜单【英文标题】:Multi-level sub-menu not closing children on click 【发布时间】:2018-03-14 10:50:35 【问题描述】:

现在我正在开发一个基于点击而不是悬停的多级子菜单。打开另一个子菜单时,我在关闭子子菜单时遇到问题。打开另一个子菜单时,必须关闭所有二级子菜单。

这是项目:https://dev.webrandcreative.nl/bespaarbazaar/。单击“Productcategorieën”按钮以显示菜单。单击“Zonnepanelen”,然后立即单击“Verlichting”。您会看到“Zonnepanelen”子菜单没有关闭。

这是我的代码:

jQuery('.navigation li.menu-item-has-children > a').click(function (e) 
    e.preventDefault();
    if (!jQuery(this).parent().hasClass('open-submenu')) 
        jQuery(this).parent().parent().find('.open-submenu').removeClass('open-submenu');
        jQuery(this).parent().addClass('open-submenu');
     else 
        jQuery('.navigation li').removeClass('open-submenu');
        jQuery(this).parent().removeClass('open-submenu').find('.open-submenu').removeClass('open-submenu');
    
);

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

这是因为您没有关闭已经打开的子菜单。

在这一行:

jQuery(this).parent().parent().find('.open-submenu').removeClass('open-submenu');

parent().parent() 仅达到特定.sub-menu.menu-item 级别。因此不会关闭来自其他.menu-items 的任何.open-submenu

因此,请确保在打开新的 .open-submenu 之前关闭所有现有的 .open-submenu

以下代码应该可以工作:

jQuery('.navigation li.menu-item-has-children > a').click(function (e) 
    e.preventDefault();
    if (!jQuery(this).parent().hasClass('open-submenu')) 
        jQuery('.navigation').find('.open-submenu').removeClass('open-submenu');
        jQuery(this).parent().addClass('open-submenu');
     else 
        jQuery(this).parent().removeClass('open-submenu').find('.open-submenu').removeClass('open-submenu');
    
);

【讨论】:

这不适用于 3 个或更多子菜单级别。尝试在使用脚本时打开“Zonnepanelen / Montagemateriaal”。

以上是关于多级子菜单不会在点击时关闭子菜单的主要内容,如果未能解决你的问题,请参考以下文章

多级下拉引导

为带有子菜单的移动菜单添加关闭功能

单击主菜单项的jQuery不会显示子子菜单

当我单击 AdminLTE 3.0 中的子菜单时,如何折叠导航树视图?

Qt 中的多级子菜单

ContextMenuStrip 动态添加多级子菜单