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

hover父元素打开子div并关闭其余子div的Javascript实现问题

实现方案

你需要在每次触发父元素hover事件时,先关闭所有非当前父元素对应的子菜单,无需设置移出时的关闭逻辑即可满足需求。

代码修改

1. JavaScript代码调整

$('li.menu-item-has-children').hover(function () {
  // 获取当前hover元素对应的子菜单
  const $currentDropdown = $(this).find('ul.dropdown-menu-main');
  // 关闭所有非当前的子菜单,同时停止未完成动画避免堆叠
  $('ul.dropdown-menu-main').not($currentDropdown).stop(true, true).fadeOut('slow').css('z-index', '-1');
  // 打开当前子菜单并提高层级避免被覆盖
  $currentDropdown.stop(true, true).fadeIn('slow').css('z-index', '10');
});

2. HTML代码修正

你原有HTML存在标签闭合错误,a标签错误使用了</div>闭合,修正后代码如下:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
  <li class="menu-item-has-children">
    <a href="#">Main 1</a>
    <ul class="dropdown-menu-main">
      <li>Sub 1</li>
    </ul>
  </li>
  
  <li class="menu-item-has-children">
    <a href="#">Main 2</a>
    <ul class="dropdown-menu-main">
      <li>Sub 2</li>
    </ul>
  </li>
</ul>

逻辑说明

  • 通过not()方法过滤出当前hover元素以外的所有子菜单,统一执行淡出操作,解决多个子菜单同时置顶显示的问题
  • 加入stop(true, true)清空未完成的动画队列,避免快速切换hover时出现动画残留、抖动的异常
  • 动态调整z-index层级,保证当前激活的子菜单始终在最上层显示
  • 没有定义hover事件的第二个移出回调,因此鼠标单纯移出父元素时不会触发子菜单关闭,完全符合需求要求

内容的提问来源于stack exchange,提问作者Erwin van Ekeren

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:45:05