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

如何为父元素div.record触发仅离开当前记录时生效的focusout类事件

解决方案

你遇到的是focusout事件的冒泡特性导致的正常现象:同record内的input失焦时,事件会向上冒泡到父级.record节点,所以会触发你绑定的处理函数。

可行实现方案

核心逻辑是在focusout事件触发时,判断新获得焦点的元素是否属于当前.record的后代节点,只有不属于时才执行提交逻辑。

代码实现

原生JavaScript版本

// 给所有.record绑定focusout事件
document.querySelectorAll('.record').forEach(record => {
  record.addEventListener('focusout', e => {
    // e.relatedTarget 是即将获得焦点的元素
    // 如果新焦点元素不存在(点击空白处),或者不在当前record内部,就触发提交
    if (!record.contains(e.relatedTarget)) {
      // 这里写你的数据提交逻辑
      console.log('离开record:', record.id, '执行提交')
    }
  })
})

jQuery版本

$('.record').on('focusout', function(e) {
  if (!$(this).has(e.relatedTarget).length) {
    // 这里写你的数据提交逻辑
    console.log('离开record:', this.id, '执行提交')
  }
})

逻辑说明

  • 同个record内部切换input时,e.relatedTarget是当前record内的另一个input,contains判断为真,不会触发提交
  • 切换到其他record的元素、点击页面空白区域、切换到浏览器其他标签页等场景下,e.relatedTarget要么是外部元素,要么为null,contains判断为假,会触发提交逻辑,完全匹配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 03:48:00