我试图在某种程度上复制Microsoft Office Outlook等程序中出现的“自动更正”功能。
对于初学者,只要用户在一行的开头键入“a”(字母a和空格),我想将该文本更改为“* Agent [”
如果您在textarea中从上到下打字,我写了以下内容可以正常工作。 但是如果您在textarea中的任何其他位置键入文本,则会更改文本,然后光标移动到textarea的末尾。
我希望光标始终放在更改文本的末尾。
我在变量currentLineNumber
中更改了行号,我知道光标需要在该行的第8个字符之后,但我不确定如何告诉它去那里
理想情况下喜欢
之类的东西function setCursor(row, position) {
//.... code to set cursor
}
我该怎么做才能做到这一点?我对javascript或jQuery解决方案持开放态度(虽然我发现jQuery有点难以阅读和理解)
如果有更好的方法来实现我的整体需求,我也会对此持开放态度。
如果你不理解这个问题,这是一个jsFiddle
答案 0 :(得分:10)
我已更新您的小提琴,请参阅:http://jsfiddle.net/eghpf/2/
我添加了此方法中使用的var currentPosition
function setSelectionRange(input, selectionStart, selectionEnd) {
if (input.setSelectionRange) {
input.focus();
input.setSelectionRange(selectionStart, selectionEnd);
}
else if (input.createTextRange) {
var range = input.createTextRange();
range.collapse(true);
range.moveEnd('character', selectionEnd);
range.moveStart('character', selectionStart);
range.select();
}
}
来自此jQuery Set Cursor Position in Text Area
会发生什么(光标始终位于最后位置的原因);是当你调用$('#systemNotesbuilder').val(arrayOfLines.join("\n"));
时,整个值被一个新值覆盖,将光标放在该新值之后。设置光标的调用是(并且应该)在该调用之后。