Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 使用onBlur在React组件中设置焦点_Reactjs_Typescript_Event Handling_Onblur_Onfocus - Fatal编程技术网

Reactjs 使用onBlur在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

我在React组件中附加了一个
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
);