2015-01-28 2 views
0

Я думал, что это будет довольно просто, но я не могу заставить его работать. Я использую следующий код, но без успеха. Я знаю, что это не работает, например, я использую хром. здесь изображен jsFiddle. БлагодаряПереместите курсор в конец текстового поля на фокус

$('#ta').focus(function(){ 
    this.selectionStart = this.value.length; 
}); 

ответ

1

Только в случае, если вы хотели, чтобы увидеть, как исправить вам оригинальное решение, так что он может работать, вот что вы должны были сделать:

$('#ta').focus(function (e) { 
    var element = this; 
    setTimeout(function() { 
     element.selectionStart = element.value.length; 
    }, 1); 
}); 

положение должно быть установлено после очень короткой задержки (1 миллисекунду достаточно в моем случае), потому что кажется, хотя позиция курсоров установлена ​​на то, где вы нажимаете после, функция фокусировки закончена, поэтому вы устанавливаете курсор в конце ввода, но затем он сразу же помещается туда, где пользователь сразу же щелкнул по нему.

Fiddle: http://jsfiddle.net/zb5uoL3t/

+0

спасибо, я понял это слишком поздно, когда сомневаюсь, добавьте timeOut :) – user2014429

-1

быстро один

$('#ta').focus(function(){ 
    moveCursorToEnd(document.getElementById('ta')); 
}); 

function moveCursorToEnd(el) { 
    if (typeof el.selectionStart == "number") { 
     el.selectionStart = el.selectionEnd = el.value.length; 
    } else if (typeof el.createTextRange != "undefined") { 
     el.focus(); 
     var range = el.createTextRange(); 
     range.collapse(false); 
     range.select(); 
    } 
} 

http://jsfiddle.net/9xaxz53x/1/

+0

Не работает. Chrome 40 ... –

2

Это кросс-браузер, и решение соответствует JQuery (он поддерживает несколько элементов в данном селекторе).

Испытано в Chrome 40x, IE 11, и FireFox 34x

$("textarea").focus(function() { 
 
    for (var i = 0; i < $(this).length; i++) { 
 
     var el = $(this)[i] 
 
     window.setTimeout(function() { 
 
      if (el !== null) { 
 
       if (el.createTextRange) { 
 
        var range = el.createTextRange(); 
 
        range.move('character', el.value.length); 
 
        range.select(); 
 
       } 
 
       else { 
 
        if (el.selectionStart || el.selectionStart === 0) { 
 
         el.focus(); 
 
         el.setSelectionRange(el.value.length, el.value.length); 
 
        } 
 
        else { 
 
         el.focus(); 
 
        } 
 
       } 
 
      } 
 
     }, 1) 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<textarea id="ta">focus on me</textarea><br /> 
 
<textarea id="ta2">focus on me</textarea>

+0

Работает, но это недопустимый HTML. – briansol

+1

@briansol - это то, что я получаю для копирования/вставки ... исправлено. –

+1

хороший код, но не работает, если сфокусирован с помощью табуляции +1 – user2014429

Смежные вопросы