12

Microsoft Office の Outlook などのプログラムに見られる「自動修正」機能を少し複製しようとしています。

手始めに、ユーザーが行の先頭に「a」(文字 a とスペース) を入力するたびに、そのテキストを「*Agent [」に変更したいと考えています。

テキストエリアに上から下に入力している場合に問題なく動作する以下を書きました。ただし、テキストエリアの他の場所に入力すると、テキストが変更され、カーソルがテキストエリアの最後に移動します。

変更されたテキストの最後にカーソルを常に配置したい。

変数で変更された行番号がありcurrentLineNumber、カーソルがその行の8番目の文字の後にある必要があることはわかっていますが、そこに移動するように指示する方法がわかりません

理想的には、次のようなものが好きです

function setCursor(row, position) {
 //.... code to set cursor 
}

これを達成するにはどうすればよいですか? 私はjavascriptまたはjQueryソリューションを受け入れています(ただし、jQueryは読みにくく、理解するのが少し難しいと思います)

全体的に必要なものを達成するためのより良い方法があれば、それも受け入れます。

問題を理解していない場合は、ここにjsFiddleがあります

4

1 に答える 1

11

私はあなたのフィドルを更新しました:http://jsfiddle.net/eghpf/2/

currentPositionこのメソッドで使用されるvar を追加しました

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"));、値全体が新しい値で上書きされ、その新しい値の後にカーソルが置かれます。カーソルを設定するための呼び出しは、その呼び出しの後にあります (そしてそうあるべきです)。

于 2013-07-25T12:55:24.787 に答える