Use JavaScript to place cursor at end of text in text input element

后端 未结 30 3885
时光说笑
时光说笑 2020-11-22 02:48

What is the best way (and I presume simplest way) to place the cursor at the end of the text in a input text element via JavaScript - after focus has been set to the element

30条回答
  •  梦谈多话
    2020-11-22 03:38

    There's a simple way to get it working in most browsers.

    this.selectionStart = this.selectionEnd = this.value.length;
    

    However, due to the *quirks of a few browsers, a more inclusive answer looks more like this

    setTimeout(function(){ that.selectionStart = that.selectionEnd = 10000; }, 0);
    

    Using jQuery (to set the listener, but it's not necessary otherwise)

    $('#el').focus(function(){
      var that = this;
      setTimeout(function(){ that.selectionStart = that.selectionEnd = 10000; }, 0);
    });
    
    

    Using Vanilla JS (borrowing addEvent function from this answer)

    // Basic cross browser addEvent
    function addEvent(elem, event, fn){
    if(elem.addEventListener){
      elem.addEventListener(event, fn, false);
    }else{
      elem.attachEvent("on" + event,
      function(){ return(fn.call(elem, window.event)); });
    }}
    var element = document.getElementById('el');
    
    addEvent(element,'focus',function(){
      var that = this;
      setTimeout(function(){ that.selectionStart = that.selectionEnd = 10000; }, 0);
    });


    Quirks

    Chrome has an odd quirk where the focus event fires before the cursor is moved into the field; which screws my simple solution up. Two options to fix this:

    1. You can add a timeout of 0 ms (to defer the operation until the stack is clear)
    2. You can change the event from focus to mouseup. This would be pretty annoying for the user unless you still kept track of focus. I'm not really in love with either of these options.

    Also, @vladkras pointed out that some older versions of Opera incorrectly calculate the length when it has spaces. For this you can use a huge number that should be larger than your string.

提交回复
热议问题