我正在编写一个React组件(v0.14.7+),当光标离开该组件时(通过选项卡、鼠标单击或触摸事件),该组件需要调用onBlur回调(通过props传入)。
挑战在于这个组件有两个输入标签。如果onBlur与第一个发生,如果获得焦点的元素是第二个输入标记,我不应该调用onBlur处理程序。换句话说,只有当焦点位于输入元素的左BOTH时,我才应该启动onBlur。
我正在寻找一个干净的解决方案来解决这个问题,它可以跨浏览器工作,理想情况下只使用React-api/合成事件。也就是说,除非我真的有必要,否则不看本地活动。我该怎么做?
请注意,onFocus事件在onBlur事件之后触发,所以我不能通过跟踪哪个字段有焦点来实现这一点。此外,onBlur事件触发时的document.activeElement似乎返回了document对象,而不是活动元素。
我会使用timeout将hasFocus
的更改(比方说)推迟一段时间。如果有另一次更新hasFocus
的尝试,请清除挂起的计划setState
尝试。不要忘记在卸载组件时清除超时
请参见工作示例。观看控制台,从第一个<--->开始聚焦时不会打印"true"one_answers"false"秒输入。
https://jsfiddle.net/69z2wepo/38136/