0

メッセージ(msg)をテキストフィールドに挿入する次の関数を作成しました。

テキストを挿入した後、カーソルは入力されたメッセージの最後の文字の後にある必要があります。テキストフィールドにはすでにテキストが含まれています。

メッセージを挿入すると、カーソルはメッセージの終わり近くのどこかにフォーカスされますが、最後の文字の後ではありません。一部の文字が .length でカウントされないようです?

     function insertAtCursor(msg) {
           var textArea = document.getElementsByName("message")[0];
           textArea.value = textArea.value.substr(0, textArea.selectionStart) + msg +        textArea.value.substr(textArea.selectionEnd);
           var endMsgPos = textArea.value.lastIndexOf(msg) + msg.length;
           textArea.setSelectionRange(endMsgPos, endMsgPos);
     }
4

2 に答える 2

1

の必要はありませんtextArea.value.lastIndexOf(msg)

function insertAtCursor(msg) {
    var textArea = document.getElementsByName("message")[0];
    var selStart = textArea.selectionStart, val = textArea.value;
    textArea.value = val.slice(0, selStart) + msg +
                     val.slice(textArea.selectionEnd);
    var endMsgPos = selStart + msg.length;
    textArea.setSelectionRange(endMsgPos, endMsgPos);
}
于 2013-10-30T13:16:09.920 に答える