如何管理react中复合输入组件的onBlur事件



我正在编写一个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/

相关内容

  • 没有找到相关文章

最新更新