我有一个包含在 Package 器div中的输入。在mousedown上的 Package 器,我希望内部输入的焦点。
import "./styles.css";
import { useRef } from "react";
export default () => {
const ref = useRef(null);
return (
<div className="App">
<div
className="Wrapper"
onMouseDown={(e) => {
ref.current.focus();
// e.preventDefault();
}}
>
<input ref={ref} />
</div>
</div>
);
};
但是,焦点不起作用,除非我包含e.preventDefault()
。但这种方法的问题是它禁用了输入上的文本突出显示,这似乎是鼠标按下时的默认行为,因此不受欢迎。另一方面,如果我使用onClick
而不是onMouseDown
,即使不阻止默认,它也能正常工作,但我想重点介绍onMouseDown
。
为什么会出现这种情况,解决的最好方法是什么?
1条答案
按热度按时间5n0oy7gb1#
发生这种情况的原因是,只要您在容器中单击,就会触发回调。并且输入是有焦点的,但随后默认处理程序执行并模糊了输入。现在,一种方法是使用setTimeout -来延迟
focus()
调用。因此,element.focus()在浏览器的默认处理程序执行之后运行。另一种方法是从输入元素中取出
stopPropagation
,然后在 Package 器中取出preventDefault
。