2010-03-14 4 views
3

Я фокусирование на поле ввода с JQuery:фокуса на поле ввода со значением

$("input:text").focus(); 

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

ответ

11

Вы можете использовать этот небольшой плагин, который я создал для вас (модифицированный из this script):

jQuery.fn.setCaret = function (pos) { 
    var input = this[0]; 
    if (input.setSelectionRange) { 
     input.focus(); 
     input.setSelectionRange(pos, pos); 
    } else if (input.createTextRange) { 
     var range = input.createTextRange(); 
     range.collapse(true); 
     range.moveEnd('character', pos); 
     range.moveStart('character', pos); 
     range.select(); 
    } 
}; 
// usage: 
$('input:text').setCaret(0); 

Демо: jsbin.com/iwetu3/2

+0

+ 1, но не могли бы вы объяснить это немного? –

+0

@D_N: он сначала проверяет, доступен ли input.setSelectionRange, объект, который использует каждый браузер, кроме IE. Если это так, он фокусирует поле и позиционирует каретку в указанной позиции. Если он недоступен, он проверяет метод IE и использует его вместо этого. – moff

+0

Ага, подумал, что это была вещь в браузере. Благодарю. –

1

Добавить SelectionStart, чтобы сделать его более броузерах

jQuery.fn.setCaret = function (pos) { 
    var input = this[0]; 
    if (input.setSelectionRange) { 
     input.focus(); 
     input.setSelectionRange(pos, pos); 
    } else if (input.createTextRange) { 
     var range = input.createTextRange(); 
     range.collapse(true); 
     range.moveEnd('character', pos); 
     range.moveStart('character', pos); 
     range.select(); 
    } else if(input.selectionStart){ 
     input.focus(); 
     input.selectionStart = pos; 
     input.selectionEnd = pos; 
    } 
}; 
// usage: 
$('input:text').setCaret(0); 
Смежные вопросы