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

JavaScript中如何判断event.currentTarget是否包含event.target?

实现方案

你需要的判断逻辑可以直接用DOM原生的Node.contains() API实现,这个方法会返回布尔值,表示传入的节点是否为该节点的后代节点,节点自身也会被判定为包含,完全匹配你的场景需求。

核心校验代码

直接在事件回调里加一层判断即可,以失焦场景为例:

function handleBlur(event) {
  const { currentTarget, target } = event;
  // 事件触发在绑定元素本身/其子元素上时,跳过误触发的逻辑
  if (currentTarget.contains(target)) {
    return;
  }
  // 下方写真正的失焦业务逻辑,比如表单校验、弹层关闭等
  console.log('焦点真正离开组件范围,执行对应逻辑');
}

// 绑定事件(推荐用支持冒泡的focusout代替不冒泡的blur,更适合组件场景)
const componentRoot = document.querySelector('#your-component');
componentRoot.addEventListener('focusout', handleBlur);

注意事项

  • 不要用target === currentTarget做判断,这种写法只能识别触发元素就是绑定元素本身的场景,所有子元素触发的事件都会被误判为组件外触发,达不到过滤效果。
  • 如果你需要兼容IE8及更早版本的浏览器,可以补充一层兼容逻辑:
function checkContains(parent, child) {
  if (parent.contains) return parent.contains(child);
  // 向上遍历DOM树做兜底判断
  while (child) {
    if (child === parent) return true;
    child = child.parentNode;
  }
  return false;
}
  • 这个判断逻辑不止可以用在失焦场景,点击外部关闭弹层、全局交互拦截等场景都可以通用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:01:57