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

时间:2016-04-12 13:49:49

标签: events reactjs onblur

我正在编写一个React组件(v0.14.7 +),当光标离开组件时(通过tab,鼠标单击或触摸事件),需要调用onBlur回调(通过props传入)。

挑战在于该组件有两个输入标签。如果onBlur与第一个发生,我不应该调用onBlur处理程序,如果获得焦点的元素是第二个输入标记。换句话说,如果焦点是输入元素的 BOTH ,我应该只触发Blur。

我正在寻找一个干净的解决方案来解决这个跨浏览器的问题,理想情况下只使用React api / synthetic事件。即除非我真的需要,否则不要看本机事件。我该怎么做?

请注意onFocus事件在onBlur事件之后触发,因此我无法通过跟踪哪个字段具有焦点来执行此操作。此外,onBlur事件触发时的document.activeElement似乎返回文档对象而不是活动元素。

1 个答案:

答案 0 :(得分:2)

我会使用超时推迟hasFocus(让我们说)改变一段时间。如果再次尝试更新hasFocus,请清除待处理的预定setState次尝试。卸载组件时不要忘记清除超时

参见工作示例。观看控制台,从第一个< --->聚焦时,你不会得到“真实”和“假”。秒输入。

https://jsfiddle.net/69z2wepo/38136/