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

jQuery导航子菜单鼠标移出后自动关闭,如何调整实现子菜单保持展开

问题原因

当前代码给.nav-main-item绑定了mouseout事件,只要鼠标离开该元素就会移除active类,导致子菜单直接收起。

方案1:子菜单hover展开后永久保持

直接删除mouseout对应的事件监听即可,修改后JS代码如下:

jQuery("#test_test").each(function() {
    jQuery(this).children(".nav-main-item").mouseover(function() {
        // 若需要每次hover仅展开当前菜单、关闭其他同级菜单,可取消注释下一行
        // jQuery(this).siblings().children(".nav-drop").removeClass('active');
        jQuery(this).children(".nav-drop").addClass('active');
    });
});  

方案2:仅鼠标完全离开「主菜单项+子菜单」整体区域时才关闭(常规多级菜单交互逻辑)

调整事件绑定逻辑,增加延迟判断避免鼠标移到子菜单时误触发关闭:

jQuery("#test_test").each(function() {
    const $mainItem = jQuery(this).children(".nav-main-item");
    let closeTimer = null;

    // 用mouseenter替代mouseover,避免子元素事件冒泡导致重复触发
    $mainItem.mouseenter(function() {
        clearTimeout(closeTimer);
        jQuery(this).children(".nav-drop").addClass('active');
    });

    $mainItem.mouseleave(function() {
        const $drop = jQuery(this).children(".nav-drop");
        closeTimer = setTimeout(() => {
            $drop.removeClass('active');
        }, 200);

        // 鼠标移入子菜单时清除关闭定时器
        $drop.mouseenter(() => {
            clearTimeout(closeTimer);
        });

        // 鼠标离开子菜单时再次触发延迟关闭
        $drop.mouseleave(() => {
            closeTimer = setTimeout(() => {
                $drop.removeClass('active');
            }, 200);
        });
    });
});  

配套CSS调整

需要给主菜单项设置相对定位,保证子菜单的绝对定位相对于主菜单项生效,避免交互区域错位:

.nav-main > li.nav-main-item {
    position: relative;
}

内容的提问来源于stack exchange,提问作者ΝΙΚΟΛΑΟΣ ΚΟΥΚΗΣ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:45:04