javascript 将第一个字符更新为大写后,光标移动到文本框的末尾

dphi5xsq  于 2024-01-05  发布在  Java
关注(0)|答案(1)|浏览(134)

尝试了很多方法来解决这个问题,但糟糕的是没有一个工作。我尝试更新输入字符串的第一个字符到文本框中的大写,这工作正常,但光标在编辑第一个字符后移动到文本框的末尾。
这是我的片段。

  1. const textOnChange = (e) => {
  2. const value = capitalizeFirstString(e.target.value)
  3. setTitle(value);
  4. };
  5. const capitalizeFirstString = (str) => {
  6. return str && str.charAt(0).toUpperCase() + str.slice(1);
  7. };

字符串
尝试添加引用并设法设置光标位置,但不幸的是,尝试的解决方案无法按预期工作。
我的目标是在编辑字符串后将第一个字符转换为大写。
任何帮助都很感激。

4szc88ey

4szc88ey1#

您可以通过保存当前selectionStart的状态,并在每次更新后使用setSelectionRange()输入法将其设置为useEffect,来保持插入符号在更改前的位置:

  1. const { useState, useRef, useEffect } = React;
  2. const capitalizeFirstString = str => str.charAt(0).toUpperCase() + str.slice(1);
  3. const Demo = () => {
  4. const [title, setTitle] = useState('');
  5. const [cPos, setCPos] = useState(0);
  6. const ref = useRef();
  7. const textOnChange = (e) => {
  8. const value = capitalizeFirstString(e.target.value)
  9. setTitle(value);
  10. setCPos(e.target.selectionStart);
  11. };
  12. useEffect(() => {
  13. ref.current.setSelectionRange(cPos, cPos);
  14. }, [cPos]);
  15. return (
  16. <input
  17. value={title}
  18. onChange={textOnChange}
  19. ref={ref} />
  20. );
  21. };
  22. ReactDOM
  23. .createRoot(root)
  24. .render(<Demo />);

个字符

展开查看全部

相关问题