gpt4 book ai didi

javascript - 输入 onFocus 时设置光标位置?

转载 作者:行者123 更新时间:2023-12-05 04:53:45 27 4
gpt4 key购买 nike

当输入聚焦时,我需要将光标(插入符号)设置到第一个位置:

CodeSandbox

我想下面的代码应该可以工作,但事实并非如此。不过,如果它是由点击按钮触发的,它就会起作用。

我做错了什么?

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>
);
}

最佳答案

onFocus 的实际问题与您的代码无关,您的代码似乎将光标放在开头,然后 focus 事件将其放回到结尾。因此,在焦点将光标置于末尾后推迟代码触发可以解决问题。

我试着把它放在 setTimeout 中,它立即开始工作。 - 使用您的代码沙箱进行测试

setTimeout(() => {
setCaretPosition(input_ref.current as HTMLInputElement, 0);
})

关于javascript - 输入 onFocus 时设置光标位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65957200/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com