有没有办法将光标设置在textarea
元素的末尾?我使用的是 Firefox 3.6,我不需要它在 IE 或 Chrome 中工作。似乎这里的所有相关答案都使用了onfocus()
事件,这似乎没用,因为当用户单击textarea
元素中的任何位置时,Firefox 会将光标位置设置到那里。我有一个长文本要显示在 a 中textarea
,以便它显示最后一部分(使其更容易在最后添加一些内容)。
没有框架或库。
有没有办法将光标设置在textarea
元素的末尾?我使用的是 Firefox 3.6,我不需要它在 IE 或 Chrome 中工作。似乎这里的所有相关答案都使用了onfocus()
事件,这似乎没用,因为当用户单击textarea
元素中的任何位置时,Firefox 会将光标位置设置到那里。我有一个长文本要显示在 a 中textarea
,以便它显示最后一部分(使其更容易在最后添加一些内容)。
没有框架或库。
可能有很多方法,例如
element.focus();
element.setSelectionRange(element.value.length,element.value.length);
自从我没有先查看 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;
}
我可能是错的。有点生锈。
selectionStart 足以设置初始光标点。
element.focus();
element.selectionStart = element.value.length;
这是一个功能
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();
}
}
var t = /* get textbox element */ ;
t.onfocus = function () {
t.scrollTop = t.scrollHeight;
setTimeout(function(){
t.select();
t.selectionStart = t.selectionEnd;
}, 10);
}
诀窍是在浏览器处理完焦点事件后使用 setTimeout 更改文本插入(克拉)位置;否则位置将由我们的脚本设置,然后立即由浏览器设置为其他位置。
textarea.focus()
textarea.value+=' ';//adds a space at the end, scrolls it into view
(this.jQuery || this.Zepto).fn.focusEnd = function () {
return this.each(function () {
var val = this.value;
this.focus();
this.value = '';
this.value = val;
});
};
@Dr.Molle 答案是正确的。只是为了增强,U 可以与 prevent-default 结合使用。
样本:
document.getElementById("textarea").addEventListener("mousedown", e => {
e.preventDefault();
moveToEnd(e.target);
});
function moveToEnd(element) {
element.focus();
element.setSelectionRange(element.value.length, element.value.length);
}