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

如何为动态创建的DOM元素设置stopPropagation()方法?

动态元素设置stopPropagation()的解决方案

你的问题核心原因是:页面初始化阶段,.new2类的动态元素还没被创建,此时调用getElementsByClassName('new2')拿到的是空集合,根本没法给后续生成的元素绑定事件,所以stopPropagation()自然不生效。

下面提供两种可行的解决办法:

方法一:创建动态元素时直接绑定事件

在生成新<li>元素的同时,立刻为它添加点击事件并调用stopPropagation():

let add = document.getElementById('add');

add.addEventListener("click", function () {
    let li = document.createElement("li");
    li.classList.add('new2');
    li.innerText = "this is the new text";
    
    // 直接给新创建的元素绑定事件
    li.addEventListener("click", function (e) {
        e.stopPropagation();
    });
    
    main.appendChild(li);
})

方法二:利用事件委托(更推荐)

借助事件冒泡的特性,把事件监听绑定到父元素main上。当点击事件冒泡到父元素时,判断触发事件的目标元素是否是.new2,如果是就阻止冒泡。这种方式不需要给每个动态元素单独绑定事件,性能更优:

let main = document.getElementById("main");

// 给父元素绑定统一的点击事件
main.addEventListener('click', function (event) {
    // 优先判断目标是否为动态元素,阻止冒泡
    if (event.target.classList.contains('new2')) {
        event.stopPropagation();
        return; // 终止后续逻辑,避免元素被删除
    }
    
    // 原有的元素删除逻辑
    let el = main.children;
    for (let e of el) {
        if (event.target == e) {
            event.target.parentNode.removeChild(event.target);
        }
    }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:01:23