【发布时间】:2021-01-29 15:21:27
【问题描述】:
当输入聚焦时,我需要将光标(插入符号)设置为 第一个位置:
我想下面的代码应该可以工作,但事实并非如此。不过,如果它是由单击按钮触发的,它就会起作用。
我做错了什么?
import React, { ChangeEventHandler, useRef, useState } from "react";
const setCaretPosition = (ctrl, pos) => {
// Modern browsers
if (ctrl.setSelectionRange) {
ctrl.focus();
ctrl.setSelectionRange(pos, pos);
}
};
export default function App() {
const [value,setValue] = useState("123456789");
const input_ref = useRef(null);
const onFocus = () => {
setCaretPosition(input_ref.current, 0);
};
const onChange = (event) => {
setValue(event.target.value);
};
const buttonClick = () => {
setCaretPosition(input_ref.current, 0);
};
return (
<React.Fragment>
<div>
<input
type="text"
onChange={onChange}
value={value}
ref={input_ref}
onFocus={onFocus}
/>
<button onClick={buttonClick}>Reset cursor</button>
</div>
</React.Fragment>
);
}
【问题讨论】:
-
使用您的 CodeSandbox 链接,它在 Firefox 中对我来说很好用。我点击文本输入,光标在开头。
-
奇怪的是你会在用户设置后重新聚焦光标
-
@epascarello 将出现
DD-MM-YYYY类型的掩码。所以我想确保光标在开头。在移动设备上通常更难选择掩码的确切开头。
标签: javascript html reactjs input onfocus