次の関数は、テキストエリアとテキスト入力の両方について、すべての主要なブラウザーで機能します。
function moveCaretToEnd(el) {
if (typeof el.selectionStart == "number") {
el.selectionStart = el.selectionEnd = el.value.length;
} else if (typeof el.createTextRange != "undefined") {
el.focus();
var range = el.createTextRange();
range.collapse(false);
range.select();
}
}
ただし、ユーザーがマウスでキャレットを移動できないため、ユーザーがテキストエリアをクリックするたびにこれを行うべきではありません。代わりに、テキストエリアがフォーカスを受け取ったときに実行してください。Chrome にも問題があり、次のように回避できます。
完全な例: http://www.jsfiddle.net/ghAB9/3/
HTML:
<textarea id="test">Something</textarea>
脚本:
var textarea = document.getElementById("test");
textarea.onfocus = function() {
moveCaretToEnd(textarea);
// Work around Chrome's little problem
window.setTimeout(function() {
moveCaretToEnd(textarea);
}, 1);
};