You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bootstrap导航栏下拉菜单点击触发异常:菜单始终展开问题求助

导航栏下拉菜单点击事件失效问题排查与解决

原代码通过hover事件实现下拉菜单的显示/隐藏,逻辑是移入显示、移出隐藏:

$(".nav-item").hover(function () {
    var menu_id = $(this).attr('data-category-id');
    $("#menu_content_" + menu_id).show();
}, function () {
    var menu_id = $(this).attr('data-category-id');
    $("#menu_content_" + menu_id).hide();
});

改成click事件后出现下拉菜单只展开不收起的问题,核心原因是:

  • hover事件包含两个回调函数(触发/离开),分别对应显示和隐藏逻辑;
  • 你只写了click的单个回调,但仅实现了显示逻辑,没有处理状态切换——点击时需要判断当前菜单是显示还是隐藏,再执行对应的操作。

解决方法

方法1:直接使用toggle()切换状态

toggle()方法会自动判断元素当前可见性,切换显示/隐藏状态,代码最简洁:

$(".nav-item").click(function () { 
    var menu_id = $(this).attr('data-category-id');
    $("#menu_content_" + menu_id).toggle();
});

方法2:手动判断可见性控制显示/隐藏

如果需要在切换时添加额外逻辑(比如动画、状态标记),可以手动判断元素状态:

$(".nav-item").click(function () { 
    var menu_id = $(this).attr('data-category-id');
    var $menu = $("#menu_content_" + menu_id);
    if ($menu.is(":visible")) {
        $menu.hide();
        // 可添加隐藏时的额外逻辑,比如移除激活类
        $(this).removeClass("active");
    } else {
        $menu.show();
        // 可添加显示时的额外逻辑,比如添加激活类
        $(this).addClass("active");
    }
});

方法3:处理多菜单互斥(可选)

如果页面有多个下拉菜单,建议点击一个菜单时收起其他已展开的菜单,避免界面混乱:

$(".nav-item").click(function () { 
    var menu_id = $(this).attr('data-category-id');
    var $targetMenu = $("#menu_content_" + menu_id);
    
    // 隐藏所有非当前目标的下拉菜单
    $(".menu-content").not($targetMenu).hide();
    // 移除其他导航项的激活状态
    $(".nav-item").not(this).removeClass("active");
    
    // 切换当前菜单的显示状态
    $targetMenu.toggle();
    // 切换当前导航项的激活状态
    $(this).toggleClass("active");
});

注:这里假设所有下拉菜单都添加了menu-content类,方便批量选择。

内容的提问来源于stack exchange,提问作者Designer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 11:10:38