Javascript 如何在自动提交后将光标保持在文本区域中的位置?

Javascript 如何在自动提交后将光标保持在文本区域中的位置?,javascript,html,Javascript,Html,我有一个表单和文本区域,我会在x秒后自动提交表单。。。但每次自动提交完成后,光标就会跳出文本区域。。。 那么,在texrarea中提交后,如何保持光标在旧位置?使用textarea属性。例如: <textarea autofocus></textarea> adsfsadfsad 触发器DOM就绪在您的自动提交代码中获取光标在文本区域的当前位置。您可以使用此函数(其中id是textarea元素的id属性): 然后将值存储在某个位置(例如,在localstorage中)

我有一个表单和文本区域,我会在x秒后自动提交表单。。。但每次自动提交完成后,光标就会跳出文本区域。。。 那么,在texrarea中提交后,如何保持光标在旧位置?

使用textarea属性。例如:

<textarea autofocus></textarea>

adsfsadfsad

触发器DOM就绪
在您的自动提交代码中获取光标在
文本区域的当前位置。您可以使用此函数(其中
id
textarea
元素的id属性):

然后将值存储在某个位置(例如,在
localstorage
中),并在表单提交后使用此函数恢复光标位置:

function setCaretPosition(id) {
    var txt = document.getElementById(id);
    if(txt.createTextRange) {
      var range = txt.createTextRange();
      range.collapse(true);
      range.moveEnd('character', caretPos);
      range.moveStart('character', caretPos);
      range.select();
      return;
    }

    if(txt.selectionStart) {
      txt.focus();
      txt.setSelectionRange(caretPos, caretPos);
    }
}

其中,caretPos是提交之前存储的光标位置。这里是一个简单的演示,可以看到函数如何工作

,而不需要看到代码,也没什么可说的。然而。您可以尝试在提交后对文本区域执行
.focus()
。它可以工作,但我必须单击鼠标才能写入。。。当我在没有点击鼠标的情况下写入时,没有任何内容写入,因为光标没有在textarea上显示,没有点击鼠标@telex wapit work,但它在提交@skobaljicI后将光标放在textarea的开始位置提交后希望将光标保持在旧位置不希望将其放在textarea的开始位置最好的方法是提交数据通过AJAX和显示结果。您将保留资源,因为如果没有数据更改,则无需提交任何内容。如果您仍然想聚焦文本区域并将光标移动到文本的末尾(或特定位置),那么除了使用脚本之外别无选择。谢谢您的帮助。。。您的答案很有用@xxxmatkoIt工作得很好,但是将caretPos作为参数传递给setCaretPosition函数会更整洁,就像在setCaretPosition(id,caretPos)。。。。
function setCaretPosition(id) {
    var txt = document.getElementById(id);
    if(txt.createTextRange) {
      var range = txt.createTextRange();
      range.collapse(true);
      range.moveEnd('character', caretPos);
      range.moveStart('character', caretPos);
      range.select();
      return;
    }

    if(txt.selectionStart) {
      txt.focus();
      txt.setSelectionRange(caretPos, caretPos);
    }
}