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

嵌套div与父级div的on click点击事件触发顺序异常问题

触发顺序异常原因

你当前的两个点击事件均通过事件委托绑定在document根节点上,和直接绑定在元素本身的事件触发逻辑存在差异:

  • 直接绑定在对应DOM元素上的事件,遵循冒泡逻辑:先触发嵌套子元素的点击事件,再向上冒泡触发父元素的点击事件
  • 委托到同一个公共根节点的事件,需要等事件冒泡到该根节点后,按照你绑定委托事件的先后顺序,依次匹配触发源是否符合选择器规则,执行对应的处理函数。你代码中先绑定了.toggle-expand的委托事件,后绑定.removeImg的委托事件,因此触发时优先执行父容器的处理逻辑,和预期顺序相反。
可行解决方案
  • 方案1:调整委托事件绑定顺序,先绑定子元素的委托事件,再绑定父容器的委托事件
// 先绑定子元素点击事件
$(document).on('click', '.removeImg', function(event){
    console.log("Cross icon got clicked");
})
// 后绑定父容器点击事件
$(document).on('click', '.toggle-expand', function(event){
    console.log("Within toggle expand");
});
  • 方案2:将事件绑定到更贴近目标元素的节点,遵循原生冒泡逻辑。父容器事件直接绑定到自身,子元素事件委托到父容器即可:
// 父容器直接绑定自身点击事件
$('.toggle-expand').on('click', function(event){
    console.log("Within toggle expand");
});
// 子元素事件委托到父容器
$('.toggle-expand').on('click', '.removeImg', function(event){
    console.log("Cross icon got clicked");
    // 若不需要触发父容器的点击事件,可添加下方代码阻止冒泡
    // event.stopPropagation();
})
  • 方案3:若需要保留所有事件委托到document的写法,可在子元素的处理函数中调用event.stopImmediatePropagation(),阻止同一节点上后续同类型事件的执行:
$(document).on('click', '.removeImg', function(event){
    console.log("Cross icon got clicked");
    // 阻止document上后续绑定的其他click事件执行
    event.stopImmediatePropagation();
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:21:01