当前位置:  开发笔记 > 编程语言 > 正文

使用JavaScript将光标放在文本输入元素中的文本末尾

如何解决《使用JavaScript将光标放在文本输入元素中的文本末尾》经验,为你挑选了10个好方法。

通过JavaScript将光标放在输入文本元素中文本末尾的最佳方法(我假设最简单的方法)是什么?在焦点设置为元素之后?



1> Gary..:

有一种简单的方法可以让它在大多数浏览器中运行.

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



2> Mike Berrow..:

我在IE中遇到了同样的问题(在通过RJS /原型设置焦点之后).当已经存在该字段的值时,Firefox已经将光标留在最后.IE正在强制光标到文本的开头.

我得到的解决方案如下:


这适用于IE7和FF3


立即在Chrome中使用(9.0.597.98)
现在这[在IE9中不起作用](http://jsfiddle.net/Town/eChds/) - 光标跳转到字段的开头.
在FF 8中也不起作用.来自chenosaurus的解决方案似乎有效.
在Chrome 24.0.1312.57,IE 9.0.8112中为我工作,但不是Firefox 18.0.2

3> chenosaurus..:

试试这个,它对我有用:

//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.


在设置值之前设置焦点是使其在Chrome中运行的关键.
为什么在第2,3和4行的输入前放置`this`?我们已经知道`input`是输入元素.使用`this`似乎是多余的.否则就是好方法!
@Tareq他们不一样.这个技巧比接受的答案要好得多.
更简单:`$ input.focus().val($ input.val());`
这就像onfocus ="this.value = this.value;

4> teedyay..:

在对此进行了一些黑客攻击后,我发现最好的方法是使用该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);


为什么计算长度?为什么不只是this.setSelectionRange(9999,9999),如果你打算过冲呢?

5> 小智..:
  

这个功能适用于IE9,Firefox 6.x和Opera 11.x.


出于某种原因,流行的答案对我不起作用.这很完美.

6> Hejner..:

我在chrome中取得了相当大的成功

$("input.focus").focus(function () {
    var val = this.value,
        $this = $(this);
    $this.val("");

    setTimeout(function () {
        $this.val(val);
    }, 1);
});

快速破解:

它将每个输入字段与类焦点放在一起,然后将输入字段的旧值存储在变量中,之后将空字符串应用于输入字段.

然后它等待1毫秒并再次输入旧值.


@ zac1987可能不是这种情况,因为php会渲染html,html会被加载到客户端然后js会运行.您有可能不等待文档就绪事件.

7> Arun Prasad ..:

简单.编辑或更改值时,首先放置焦点然后设置值.

$("#catg_name").focus();
$("#catg_name").val(catg_name);



8> 小智..:

仍然需要中间变量,(参见var val =)否则游标表现很奇怪,我们最后需要它.




9> 小智..:

对于所有情况的所有浏览器:

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事件处理程序移动光标,则需要超时



10> Andy Raddatz..:

这是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
推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有