Reactjs 使用onBlur在React组件中设置焦点
我在React组件中附加了一个Reactjs 使用onBlur在React组件中设置焦点,reactjs,typescript,event-handling,onblur,onfocus,Reactjs,Typescript,Event Handling,Onblur,Onfocus,我在React组件中附加了一个onBlur事件处理程序,其中的逻辑将焦点设置回目标元素(并在TypeScript中编写) 但是焦点永远不会被设定——如果我从目标元素点击到另一个元素,焦点永远不会回到目标元素 为什么焦点没有回到目标元素 为什么焦点没有回到目标元素 使用setTimeout使blur在再次focus之前完成您是否尝试过使用e.currentTarget和类似的超时 e.preventDefault(); const target = e.currentTarget; setTime
onBlur
事件处理程序,其中的逻辑将焦点设置回目标元素(并在TypeScript中编写)
但是焦点永远不会被设定——如果我从目标元素点击到另一个元素,焦点永远不会回到目标元素
为什么焦点没有回到目标元素
为什么焦点没有回到目标元素
使用
setTimeout
使blur
在再次focus
之前完成您是否尝试过使用e.currentTarget和类似的超时
e.preventDefault();
const target = e.currentTarget;
setTimeout(
function () {
target.focus();
},
5
);
如果我用一个500毫秒的计时器将它包装在一个
setTimeout
中,我会得到异常“TypeError:e.currentTarget.focus不是一个函数”。如果我将语句切换为使用e.target…
或e.relatedTarget…
,那么我被告知focus
不是函数或属性。另外,如果我使用e.preventDefault
,为什么我需要等待blur
完成?您使用的是什么版本的react.js?您在控制台中是否有一些错误?您可能甚至不需要在超时中延迟5
。可以省略setTimeout
的delay参数,以确保函数在下一个刻度中被调用。
<input type="email" onBlur={this.emailBlur} />
this.emailBlur = this.emailBlur.bind(this);
e.preventDefault();
const target = e.currentTarget;
setTimeout(
function () {
target.focus();
},
5
);