Подтвердить что ты не робот

Как установить позицию курсора в конце текста ввода в Google Chrome

Я пытаюсь установить курсор в текстовое поле с функцией фокусировки. Я провел несколько исследований, но ни один из предлагаемых решений, похоже, не работал в Google Chrome. В Internet Explorer и Firefox это решение работает нормально:

js:

$('#Search').focus(function() {
  var SearchInput = $('#Search');
  var strLength= SearchInput.val().length;
  SearchInput.focus();
  SearchInput[0].setSelectionRange(strLength, strLength);
});

HTML:

<input type="text" id="Search" value="Hello World" />

Здесь ссылка на мой jsfiddle.

Есть ли способ сделать эту работу в Google Chrome тоже?

4b9b3361

Ответ 1

Похоже, что фокусное событие запускается до того, как курсор помещается, когда вы фокусируете ввод, хакерским обходным путем было бы использовать setTimeout следующим образом:

$('#Search').focus(function() {
    setTimeout((function(el) {
        var strLength = el.value.length;
        return function() {
            if(el.setSelectionRange !== undefined) {
                el.setSelectionRange(strLength, strLength);
            } else {
                $(el).val(el.value);
            }
    }}(this)), 0);
});

Попробуйте эту скрипту: http://jsfiddle.net/esnvh/26/

Отредактировано до 0 мс таймаута, так как @SparK указал, что этого достаточно, чтобы выполнить до конца очереди выполнения.

Ответ 2

Обновленный код

Ссылка: http://css-tricks.com/snippets/jquery/move-cursor-to-end-of-textarea-or-input/

setSelectionRange не поддерживается в IE, Opera и Safari

Я предлагаю вам сделать что-то вроде этого (работает в IE, Chrome, Safari, Firefox).

$('#Search').on('mouseup', function() {
    var element = $(this)[0];
    if (this.setSelectionRange) {
        var len = $(this).val().length * 2;
        element.setSelectionRange(len, len);
    }
    else {
        $(this).val($(this).val());
        $(this).focus();
    }
    element.scrollTop = 9999;
});

Попробуйте следующее: http://jsfiddle.net/r5UVW/4/

Ответ 3

Используйте событие mouseup для этого:

$("#Search").mouseup(function () {
    this.setSelectionRange(this.value.length, this.value.length);    
});

Ответ 4

FYI, в настоящее время ввод номера не поддерживает setSelectionRange(), поэтому быстрое решение - просто выбрать текст, используя .select(). В настольных браузерах это подчеркивает текст, на мобильных телефонах это перемещает курсор прямо в конец текста.