20

我有一个文本区域,当我点击它时,我想将插入符号移动到最后一个字符,所以Something[caret]

function moveCaret(){
     // Move caret to the last character
}
<textarea onclick="moveCaret();">
     Something
</textarea>

据我所知,这对于 TextRange 对象来说是可能的,但我真的不知道如何使用它

编辑:我希望只看到纯 javascript 解决方案,所以请不要使用库。

4

1 回答 1

43

以下功能适用于所有主流浏览器,包括文本区域和文本输入:

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();
    }
}

但是,当用户单击文本区域时,您真的不应该这样做,因为用户将无法用鼠标移动插入符号。相反,请在 textarea 获得焦点时执行此操作。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);
};
于 2011-01-17T17:31:46.477 回答