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

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

    In jQuery, that's

    $(document).ready(function () {
      $('input').focus(function () {
        $(this).attr('value',$(this).attr('value'));
      }
    }
    
    0 讨论(0)
  • 2020-11-22 03:23

    After hacking around with this a bit, I found the best way was to use the setSelectionRange function if the browser supports it; if not, revert to using the method in Mike Berrow's answer (i.e. replace the value with itself).

    I'm also setting scrollTop to a high value in case we're in a vertically-scrollable textarea. (Using an arbitrary high value seems more reliable than $(this).height() in Firefox and Chrome.)

    I've made it is as a jQuery plugin. (If you're not using jQuery I trust you can still get the gist easily enough.)

    I've tested in IE6, IE7, IE8, Firefox 3.5.5, Google Chrome 3.0, Safari 4.0.4, Opera 10.00.

    It's available on jquery.com as the PutCursorAtEnd plugin. For your convenience, the code for release 1.0 is as follows:

    // 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);
    
    0 讨论(0)
  • 2020-11-22 03:24

    This problem is interesting. The most confusing thing about it is that no solution I found solved the problem completely.

    +++++++ SOLUTION +++++++

    1. You need a JS function, like this:

      function moveCursorToEnd(obj) {
      
        if (!(obj.updating)) {
          obj.updating = true;
          var oldValue = obj.value;
          obj.value = '';
          setTimeout(function(){ obj.value = oldValue; obj.updating = false; }, 100);
        }
      
      }
      
    2. You need to call this guy in the onfocus and onclick events.

      <input type="text" value="Test Field" onfocus="moveCursorToEnd(this)" onclick="moveCursorToEnd(this)">
      

    IT WORKS ON ALL DEVICES AN BROWSERS!!!!

    0 讨论(0)
  • 2020-11-22 03:24

    Taking some of the answers .. making a single-line jquery.

    $('#search').focus().val($('#search').val());
    
    0 讨论(0)
  • 2020-11-22 03:25

    If you set the value first and then set the focus, the cursor will always appear at the end.

    $("#search-button").click(function (event) {
        event.preventDefault();
        $('#textbox').val('this');
        $("#textbox").focus();
        return false;
    });
    

    Here is the fiddle to test https://jsfiddle.net/5on50caf/1/

    0 讨论(0)
  • 2020-11-22 03:26

    It's 2019 and none of the methods above worked for me, but this one did, taken from 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();
      }
    }
    <input id="myinput" type="text" />
    <a href="#" onclick="moveCursorToEnd('myinput')">Move cursor to end</a>

    0 讨论(0)
提交回复
热议问题