如何更新/重新启动菜单?

Posted

技术标签:

【中文标题】如何更新/重新启动菜单?【英文标题】:How to update/reinitiate mmenu? 【发布时间】:2013-11-16 11:41:03 【问题描述】:

我尝试过使用 jQuery.mmenu-plugin,在这里找到 http://mmenu.frebsite.nl/。它适用于预定义列表,但是如何处理使用 jQuery 更新的列表?

这是一个初始化菜单的例子:

<nav id="menu" class="mm-menu mm-horizontal mm-ismenu mm-hasheader mm-hassearch mm-current mm-opened">
    <div class="mm-panel mm-opened mm-current" id="mm-m1-p0">               
       <ul id="list" class="mm-list">
            <li id="1"><a>item 1</a></li>
            <li id="2"><a>item 2</a></li>
            <li id="3"><a>item 3</a></li>
        </ul>
    </div>
</nav>

然后我通过以下方式将项目附加到列表中:

$("#list").append('<li id="4"><a>"item 4"</a></li>');

附加的(第四个)li-item 不会获得与初始化 mmenu 之前定义的 li-item 相同的行为。这意味着初始化后添加的项目将无法与搜索字段一起使用,例如。

有没有办法重新启动菜单或更新与其连接的项目?

【问题讨论】:

id 不应该只是一个数字,甚至不能以数字开头。 上面的列表只是一个例子,我没有使用它。但是,是的,我什至不应该在其中添加任何 id。 【参考方案1】:

简要浏览插件的 (mmenu.js) 代码后,您可以更改 javascript 以侦听 DOM 以获取新的 &lt;a[href="#id"']&gt; 元素:

调整:

  click( $('a[href="#' + id + '"]', that.$menu), function( e ) 
       $opening.trigger( evt );
  

到:

  click( $(document).find('a[href="#' + id + '"]', that.$menu ), function( e ) 
       $opening.trigger( evt );
  

这将确保$menu 可用于任何已加载和未加载的 DOM 元素。

或者,您可以重新初始化它:

var $Mmenu = $('#menu'),
    $Container = $Mmenu.parent(),
    $List  = $('#menu #list');

    $List.append('<li id="4"><a>"item 4"</a></li>');

var newhtml = $Mmenu.html();

    $Mmenu.remove();
    $Container.append( newHtml );
    $(document).find('#menu').mmenu();

【讨论】:

谢谢,但答案似乎不足以解决问题。添加的列表项仍然不会获得 mmenu 行为。单击附加项目不会将类设置为“mm-selected”。 已更新替代方案,我想您需要编辑更多插件代码才能使新添加的 DOM 元素正常工作。 @Gustav 另外,您需要编辑三个位置才能使第一个建议起作用,而不仅仅是一行。 我采用了类似于您的替代解决方案的方法。尽管删除和添加菜单并没有让我感觉很舒服,但它确实有效。谢谢! 我同意这不是最舒适的解决方案!也许向插件作者提交票证可能会构建一个更干净的新 dom 元素版本,或者我可能会在有机会时自己创建一个版本:-)【参考方案2】:

插件的实例附加到菜单上。计数器插件在插件上注册了一个更新函数,搜索插件使用该函数来影响其他插件的更改。例如当您在搜索框中输入内容时,它将修剪子菜单的可见子项并更新计数器。

要连接到这里,您需要附加到菜单元素的插件实例(因为有一个包含已注册更新函数的数组)

所以,如果你有这样的元素:

&lt;nav id="menu"&gt;&lt;/nav&gt;

您通过以下方式初始化的:

$("#menu").mmenu();

然后在插件对象上调用_update()方法:

$("#menu").data('mmenu')._update();
    'menu' is the id of my menu element
    'mmenu' is the name of the plugin
    _update() is the magic function that will call all the update functions registered in the updates array

【讨论】:

这工作正常,但尝试动态添加子菜单和更新时出现问题。我的子菜单列表更新得很好,但没有返回按钮/指向上一个父菜单的链接。我错过了什么@jkeane?

以上是关于如何更新/重新启动菜单?的主要内容,如果未能解决你的问题,请参考以下文章

iPhone没有出现在Safari的“开发”菜单中

双系统ubuntu启动菜单怎么删除?

win10 如何不用软件修改计算机属性中cpu型号 重启有效

有没有办法在 iPhone 模拟器上点击菜单按钮然后重新启动应用程序后查看日志记录?

覆盖或禁用设置菜单

DELL电脑装windows7出现这台计算机的硬件可能不支持启动到此磁盘。请确保在计算机的BIOS菜单中启用了磁盘