You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何从jQuery mmenu菜单结构外部触发打开子菜单?

解决mmenu从外部触发打开子菜单的问题

嘿,我懂你遇到的这个困扰——直接用指向mmenu子菜单ID的链接确实没法触发打开,因为mmenu有自己的内部状态管理和专属API,不是靠普通的锚点跳转就能控制的。给你个靠谱的解决方案:

步骤1:初始化mmenu时保存实例

首先在初始化mmenu的时候,一定要把实例保存下来,这样后面才能调用它的控制方法:

// 初始化mmenu并存储实例
const myMenu = new Mmenu("#my-menu", {
  // 这里放你的mmenu配置项,比如主题、动画效果之类的
});

步骤2:给外部链接绑定点击事件

给触发链接加个类名(比如open-submenu),然后绑定点击事件,调用mmenu的open()方法来打开指定子菜单,记得阻止默认的锚点跳转行为:

HTML部分:

<div class="content">
  <a href="#mm-2" class="open-submenu">Open submenu from here</a>
</div>

<!-- 你的mmenu结构示例 -->
<nav id="my-menu">
  <ul>
    <li><a href="/">Home</a></li>
    <li>
      <a href="#">Products</a>
      <ul id="mm-2">
        <li><a href="#">Product 1</a></li>
        <li><a href="#">Product 2</a></li>
      </ul>
    </li>
  </ul>
</nav>

JavaScript部分:

// 找到外部触发链接,绑定点击事件
document.querySelector('.open-submenu').addEventListener('click', function(e) {
  e.preventDefault(); // 阻止默认的锚点跳转行为
  // 调用mmenu实例的open方法,传入子菜单的选择器
  myMenu.open('#mm-2');
});

额外提示

如果有多个外部触发链接,推荐用事件委托来绑定事件,这样更高效,也不用给每个链接单独绑定:

// 给父容器绑定事件,处理所有.open-submenu链接
document.querySelector('.content').addEventListener('click', function(e) {
  if (e.target.classList.contains('open-submenu')) {
    e.preventDefault();
    const targetSubmenu = e.target.getAttribute('href');
    myMenu.open(targetSubmenu);
  }
});

这样不管你加多少个触发链接,都能自动生效啦~

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

火山引擎 最新活动