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

后端 未结 30 3690
时光说笑
时光说笑 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:34

    I also faced same problem. Finally this gonna work for me:

    jQuery.fn.putCursorAtEnd =  = function() {
    
      return this.each(function() {
    
        // Cache references
        var $el = $(this),
            el = this;
    
        // Only focus if input isn't already
        if (!$el.is(":focus")) {
         $el.focus();
        }
    
        // If this function exists... (IE 9+)
        if (el.setSelectionRange) {
    
          // Double the length because Opera is inconsistent about whether a carriage return is one character or two.
          var len = $el.val().length * 2;
    
          // Timeout seems to be required for Blink
          setTimeout(function() {
            el.setSelectionRange(len, len);
          }, 1);
    
        } else {
    
          // As a fallback, replace the contents with itself
          // Doesn't work in Chrome, but Chrome supports setSelectionRange
          $el.val($el.val());
    
        }
    
        // Scroll to the bottom, in case we're in a tall textarea
        // (Necessary for Firefox and Chrome)
        this.scrollTop = 999999;
    
      });
    
    };
    

    This is how we can call this:

    var searchInput = $("#searchInputOrTextarea");
    
    searchInput
      .putCursorAtEnd() // should be chainable
      .on("focus", function() { // could be on any event
        searchInput.putCursorAtEnd()
      });
    

    It's works for me in safari, IE, Chrome, Mozilla. On mobile devices I didn't tried this.

提交回复
热议问题