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

使用innerHTML添加dropdown-submenu时click事件无法触发问题求助

问题解决:动态添加的Bootstrap嵌套下拉菜单点击事件不触发

问题原因

你通过innerHTML动态添加的.dropdown-submenu > a元素,是在事件绑定代码执行之后才生成的。直接用$('.dropdown-submenu > a').on("click", ...)只能给绑定代码执行时已存在的元素绑定事件,动态新增的元素不会继承这个事件绑定,所以点击事件无法触发。

解决方案:使用jQuery事件委托

把事件绑定到一个页面加载时就存在的父级元素上(比如你的#btnBookmarkMenu或外层.dropdown),通过事件委托监听动态元素的点击事件。

修改后的JavaScript代码如下:

var bookmarkMenu = document.getElementById("btnBookmarkMenu");

// 动态插入菜单内容
bookmarkMenu.innerHTML = '<li class="dropdown-item dropdown-submenu"><a href="#" data-toggle="dropdown">Submenu-1</a><ul class="dropdown-menu"><li class="dropdown-item"><a href="#">Item-1</a></li><li class="dropdown-item"><a href="#">Item-2</a></li><li class="dropdown-item"><a href="#">Item-3</a></li></ul></li>' + bookmarkMenu.innerHTML;

// 改用事件委托,绑定到静态父元素#btnBookmarkMenu
$('#btnBookmarkMenu').on("click", '.dropdown-submenu > a', function(e) {
    var submenu = $(this);
    $('.dropdown-submenu .dropdown-menu').removeClass('show');
    submenu.next('.dropdown-menu').addClass('show');
    e.stopPropagation();
});
    
$('.dropdown').on("hidden.bs.dropdown", function() {
    // 父菜单关闭时隐藏所有展开的子菜单
    $('.dropdown-menu.show').removeClass('show');
});

代码说明

  • 事件委托利用事件冒泡机制:点击动态元素时,事件会冒泡到父级静态元素,父级元素再判断触发事件的目标是否匹配.dropdown-submenu > a选择器,匹配则执行回调函数。
  • 必须选择页面初始就存在的父元素作为委托对象,比如#btnBookmarkMenu从一开始就在HTML结构中,能确保事件委托稳定生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:35:16