通过JavaScript将光标放在输入文本元素中文本末尾的最佳方法(我假设最简单的方法)是什么?在焦点设置为元素之后?
有一种简单的方法可以让它在大多数浏览器中运行.
this.selectionStart = this.selectionEnd = this.value.length;
但是,由于一些浏览器的怪癖,更具包容性的答案看起来更像这样
setTimeout(function(){ that.selectionStart = that.selectionEnd = 10000; }, 0);
使用jQuery (设置监听器,但不是必须的)
$('#el').focus(function(){
var that = this;
setTimeout(function(){ that.selectionStart = that.selectionEnd = 10000; }, 0);
});
我在IE中遇到了同样的问题(在通过RJS /原型设置焦点之后).当已经存在该字段的值时,Firefox已经将光标留在最后.IE正在强制光标到文本的开头.
我得到的解决方案如下:
这适用于IE7和FF3
试试这个,它对我有用:
//input is the input element input.focus(); //sets focus to element var val = this.input.value; //store the value of the element this.input.value = ''; //clear the value of the element this.input.value = val; //set that value back.
要使光标移动到最后,输入必须首先具有焦点,然后当值改变时,它将转到结尾.如果将.value设置为相同,则不会更改chrome.
在对此进行了一些黑客攻击后,我发现最好的方法是使用该setSelectionRange
功能,如果浏览器支持它; 如果没有,请回复使用Mike Berrow的答案中的方法(即将值替换为自身).
scrollTop
如果我们处于可垂直滚动状态,我也会设置很高的值textarea
.(使用任意高值似乎比$(this).height()
Firefox和Chrome 更可靠.)
我已经把它作为一个jQuery插件.(如果你没有使用jQuery,我相信你仍然可以轻松地获得要点.)
我已经在IE6,IE7,IE8,Firefox 3.5.5,谷歌Chrome 3.0,Safari 4.0.4,Opera 10.00中进行了测试.
它在jquery.com上可用作PutCursorAtEnd插件.为方便起见,1.0版的代码如下:
// jQuery plugin: PutCursorAtEnd 1.0 // http://plugins.jquery.com/project/PutCursorAtEnd // by teedyay // // Puts the cursor at the end of a textbox/ textarea // codesnippet: 691e18b1-f4f9-41b4-8fe8-bc8ee51b48d4 (function($) { jQuery.fn.putCursorAtEnd = function() { return this.each(function() { $(this).focus() // If this function exists... if (this.setSelectionRange) { // ... then use it // (Doesn't work in IE) // Double the length because Opera is inconsistent about whether a carriage return is one character or two. Sigh. var len = $(this).val().length * 2; this.setSelectionRange(len, len); } else { // ... otherwise replace the contents with itself // (Doesn't work in Google Chrome) $(this).val($(this).val()); } // Scroll to the bottom, in case we're in a tall textarea // (Necessary for Firefox and Google Chrome) this.scrollTop = 999999; }); }; })(jQuery);
这个功能适用于IE9,Firefox 6.x和Opera 11.x.
我在chrome中取得了相当大的成功
$("input.focus").focus(function () { var val = this.value, $this = $(this); $this.val(""); setTimeout(function () { $this.val(val); }, 1); });
快速破解:
它将每个输入字段与类焦点放在一起,然后将输入字段的旧值存储在变量中,之后将空字符串应用于输入字段.
然后它等待1毫秒并再次输入旧值.
简单.编辑或更改值时,首先放置焦点然后设置值.
$("#catg_name").focus(); $("#catg_name").val(catg_name);
仍然需要中间变量,(参见var val =)否则游标表现很奇怪,我们最后需要它.
对于所有情况的所有浏览器:
function moveCursorToEnd(el) { window.setTimeout(function () { if (typeof el.selectionStart == "number") { el.selectionStart = el.selectionEnd = el.value.length; } else if (typeof el.createTextRange != "undefined") { var range = el.createTextRange(); range.collapse(false); range.select(); } }, 1); }
如果需要从onFocus事件处理程序移动光标,则需要超时
这是2019年,上面的方法都不适合我,但是这个方法确实有用,取自https://css-tricks.com/snippets/javascript/move-cursor-to-end-of-input/
function moveCursorToEnd(id) {
var el = document.getElementById(id)
el.focus()
if (typeof el.selectionStart == "number") {
el.selectionStart = el.selectionEnd = el.value.length;
} else if (typeof el.createTextRange != "undefined") {
var range = el.createTextRange();
range.collapse(false);
range.select();
}
}
Move cursor to end