Установите фокус мыши и переместите курсор в конец ввода, используя jQuery - PullRequest
86 голосов
/ 29 июня 2009

Этот вопрос задавался в нескольких различных форматах, но я не могу получить ответы на какие-либо вопросы в моем сценарии.

Я использую jQuery для реализации истории команд, когда пользователь нажимает стрелки вверх / вниз. Когда нажата стрелка вверх, я заменяю введенное значение предыдущей командой и устанавливаю фокус на поле ввода, но хочу, чтобы курсор всегда располагался в конце строки ввода.

Мой код, как есть:

$(document).keydown(function(e) {
  var key   = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
  var input = self.shell.find('input.current:last');

  switch(key) {
    case 38: // up
      lastQuery = self.queries[self.historyCounter-1];
      self.historyCounter--;
      input.val(lastQuery).focus();
// and it continues on from there

Как заставить курсор поместить курсор в конец ввода после фокуса?

Ответы [ 18 ]

3 голосов
/ 23 мая 2014

Как и другие говорили, у меня получилось очистить и заполнить:

    var elem = $('#input_field');
    var val = elem.val();
    elem.focus().val('').val(val);
2 голосов
/ 17 апреля 2012

Я нашел то же самое, что было предложено выше несколькими людьми. Если вы сначала наберете focus(), а затем нажмете val() на входе, курсор будет помещен в конец значения ввода в Firefox, Chrome и IE. Если вы сначала нажмете val() в поле ввода, Firefox и Chrome позиционируют курсор в конце, но IE позиционирует его вперед, когда вы focus().

$('element_identifier').focus().val('some_value') 

должен добиться цели (это всегда так для меня).

2 голосов
/ 15 июня 2018

Вот еще один, один вкладыш, который не переназначает значение:

$("#inp").focus()[0].setSelectionRange(99999, 99999);
2 голосов
/ 13 мая 2013

Сначала необходимо установить фокус на выбранном объекте текстового поля, а затем установить значение.

$('#inputID').focus();
$('#inputID').val('someValue')
2 голосов
/ 16 августа 2016

сначала установите значение. затем установите фокус. когда он фокусируется, он будет использовать значение, которое существует во время фокусировки, поэтому ваше значение должно быть установлено первым.

эта логика работает для меня с приложением, которое заполняет <input> значением нажатой <button>. val() устанавливается первым. тогда focus()

$('button').on('click','',function(){
    var value = $(this).attr('value');
    $('input[name=item1]').val(value);
    $('input[name=item1]').focus();
});
1 голос
/ 08 июля 2015
    function focusCampo(id){
        var inputField = document.getElementById(id);
        if (inputField != null && inputField.value.length != 0){
            if (inputField.createTextRange){
                var FieldRange = inputField.createTextRange();
                FieldRange.moveStart('character',inputField.value.length);
                FieldRange.collapse();
                FieldRange.select();
            }else if (inputField.selectionStart || inputField.selectionStart == '0') {
                var elemLen = inputField.value.length;
                inputField.selectionStart = elemLen;
                inputField.selectionEnd = elemLen;
                inputField.focus();
            }
        }else{
            inputField.focus();
        }
    }

$('#urlCompany').focus(focusCampo('urlCompany'));

работает для всех, т.е. браузеров ..

0 голосов
/ 13 июня 2012
function CurFocus()
{
    $('.txtEmail').focus(); 
}

function pageLoad()
{
   setTimeout(CurFocus(),3000);
}

window.onload = pageLoad;
0 голосов
/ 01 апреля 2013

Ответ от scorpion9 работает. Просто чтобы было понятнее, смотрите мой код ниже,

<script src="~/js/jquery.js"></script> 
<script type="text/javascript">
    $(function () {
        var input = $("#SomeId");
        input.focus();
        var tmpStr = input.val();
        input.val('');
        input.val(tmpStr);
    });
</script>
...