20

有没有办法将光标设置在textarea元素的末尾?我使用的是 Firefox 3.6,我不需要它在 IE 或 Chrome 中工作。似乎这里的所有相关答案都使用了onfocus()事件,这似乎没用,因为当用户单击textarea元素中的任何位置时,Firefox 会将光标位置设置到那里。我有一个长文本要显示在 a 中textarea,以便它显示最后一部分(使其更容易在最后添加一些内容)。

没有框架或库。

4

8 回答 8

39

可能有很多方法,例如

element.focus();
element.setSelectionRange(element.value.length,element.value.length);

http://jsfiddle.net/doktormolle/GSwfW/

于 2012-04-14T23:39:12.633 回答
5

自从我没有先查看 jQuery 解决方案就使用 javascript 已经有很长时间了......

话虽如此,使用 javascript 的最佳方法是在 textarea 聚焦时获取当前在 textarea 中的值,并将 textarea 的值设置为获取的值。这在 jQuery 中总是有效的:

$('textarea').focus(function() {
    var theVal = $(this).val();
    $(this).val(theVal);
});

在纯 JavaScript 中:

var theArea = document.getElementByName('[textareaname]');

theArea.onFocus = function(){
    var theVal = theArea.value;
    theArea.value = theVal;
}

我可能是错的。有点生锈。

于 2012-04-14T23:48:02.110 回答
4

selectionStart 足以设置初始光标点。

    element.focus();
    element.selectionStart = element.value.length;
于 2021-07-05T09:58:33.763 回答
3

这是一个功能

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

[演示] [来源]

于 2012-04-14T23:51:41.207 回答
2
var t = /* get textbox element */ ;

t.onfocus = function () { 
    t.scrollTop = t.scrollHeight; 
    setTimeout(function(){ 
      t.select(); 
      t.selectionStart = t.selectionEnd; 
    }, 10); 
}

诀窍是在浏览器处理完焦点事件使用 setTimeout 更改文本插入(克拉)位置;否则位置将由我们的脚本设置,然后立即由浏览器设置为其他位置。

于 2012-04-14T23:28:32.570 回答
2
textarea.focus()
textarea.value+=' ';//adds a space at the end, scrolls it into view
于 2012-04-15T05:39:23.767 回答
1
(this.jQuery || this.Zepto).fn.focusEnd = function () {
    return this.each(function () {
        var val = this.value;
        this.focus();
        this.value = '';
        this.value = val;
    });
};
于 2013-10-12T13:26:23.997 回答
0

@Dr.Molle 答案是正确的。只是为了增强,U 可以与 prevent-default 结合使用。

http://jsfiddle.net/70des6y2/

样本:

document.getElementById("textarea").addEventListener("mousedown", e => {
  e.preventDefault();
  moveToEnd(e.target);
});
function moveToEnd(element) {
  element.focus();
  element.setSelectionRange(element.value.length, element.value.length);
}
于 2019-06-10T17:47:16.257 回答