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

Angular中点击子元素输入框时意外触发focusout事件的问题

问题原因与解决方案

问题根源

外层div设置了tabindex="0",因此它成为了可聚焦元素。当点击内部input输入框时,焦点会从外层div转移到input上,此时div失去焦点,自然触发focusout事件。而需求是焦点在div内部切换时不触发该事件,核心是要判断失去焦点后,新焦点是否仍属于当前div的子元素。

解决方法

修改moveoutFromTagArea方法,利用FocusEvent的relatedTarget属性判断新焦点元素是否是div的后代:

moveoutFromTagArea(event: FocusEvent) {
  const currentDiv = event.currentTarget as HTMLElement;
  // 检查新焦点元素是否在当前div内部
  if (event.relatedTarget && currentDiv.contains(event.relatedTarget as Node)) {
    return; // 焦点仍在内部,不执行后续逻辑
  }
  // 这里写你原本要执行的离开逻辑
}

补充说明

  • relatedTarget属性会指向焦点转移后的目标元素,如果点击的是页面空白处,该值为null,此时会正常执行离开逻辑。
  • 不需要修改模板代码,只需要调整组件中的事件处理方法即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 02:27:21