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

点击Checkbox Label时,如何消除RxJS中多余的focus/blur事件?

点击关联label时checkbox的focus/blur事件异常

我有一个HTML label和HTML input checkbox,需要构建focus和blur事件的RxJS流,确保点击label时行为正常。实际项目中使用Bootstrap组件,出于样式需求隐藏了input——交互对象是样式化为复选框的label,checkbox本身设为opacity=0不可见。

问题在于:点击label时,若checkbox原本已获取焦点,会先失去焦点(触发blur事件),随后重新获取焦点(触发focus事件),产生一对多余事件,且仅点击label时会出现此情况。我不理解原因,因为label本不应是可聚焦元素。

示例代码

HTML代码

<label for="checkbox">Click On CheckBox Label</label>
<input type="checkbox" id="checkbox" />

JS代码

import { of, map, fromEvent } from 'rxjs';

const element = document.querySelector('#checkbox');

fromEvent(element, 'focus').subscribe((event) => console.log('focus'));
fromEvent(element, 'blur').subscribe((event) => console.log('blur'));

事件表现

点击label时会重复触发以下事件:

  • 首次点击label:
    • blur // 疑似label获取焦点导致checkbox失焦
    • focus // checkbox重新获取焦点
  • 再次点击label:
    • blur // 疑似label获取焦点导致checkbox失焦
    • focus // checkbox重新获取焦点
  • ……

期望得到与直接点击checkbox时一致的RxJS focus/blur事件流。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:24:16