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

Bootstrap 4 Dropdown克隆后点击新菜单错误展开原菜单问题

问题触发原因
  • Bootstrap下拉菜单组件初始化后,会将组件实例、关联菜单元素引用等状态数据存储在对应DOM节点的jQuery缓存中,同时会绑定专属的点击事件处理器。
  • 你使用clone(true)方法克隆节点时,会同步克隆原节点的所有绑定事件、jQuery缓存数据。如果克隆前已经触发过原下拉菜单的展开操作,原节点缓存的组件实例已经绑定了原菜单元素的引用,克隆得到的新下拉菜单会复用这个旧实例,点击时自然会控制原菜单的展开收起,而不是操作自身对应的新菜单。
解决方案

可任选以下一种方案修复:

方案1:克隆后重新初始化新下拉菜单

克隆时不同步原有事件和数据,追加到容器后手动重新初始化下拉菜单即可,修改JS代码如下:

$("#btnClone").click(function () {
    var c = $("div.dropdown").clone(false);
    // 清空容器追加新节点后,重新初始化新的下拉菜单
    $("#clone").empty().append(c).find('.dropdown-toggle').dropdown();
});

方案2:使用未初始化的模板做克隆源

提前将下拉菜单代码存入隐藏的模板容器,避免模板被Bootstrap提前初始化,从根源避免状态冲突问题,代码示例如下:
新增隐藏模板:

<!-- 隐藏的下拉菜单模板 -->
<div id="dropdownTpl" style="display:none">
    <div class='dropdown'>
        <button class="btn dropdown-toggle" type="button" data-toggle="dropdown">Menu</button>
        <div class="dropdown-menu">
            <a class="dropdown-item" href="#">Item 1</a>
            <a class="dropdown-item" href="#">Item 2</a>
        </div>
    </div>
</div>

<button id="btnClone" type="button">Clone</button>
<div id="clone"></div>

对应JS代码:

$("#btnClone").click(function () {
    var c = $("#dropdownTpl .dropdown").clone();
    $("#clone").append(c);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:54:02