如何从jQuery 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




