Извлечено из « Задания положения курсора клавиатуры» Джоша Стодолы в текстовом поле или текстовой области с использованием Javascript
Универсальная функция, которая позволит вам вставить каретку в любую позицию текстового поля или текстовой области, которую вы пожелаете:
function setCaretPosition(elemId, caretPos) {
var elem = document.getElementById(elemId);
if(elem != null) {
if(elem.createTextRange) {
var range = elem.createTextRange();
range.move('character', caretPos);
range.select();
}
else {
if(elem.selectionStart) {
elem.focus();
elem.setSelectionRange(caretPos, caretPos);
}
else
elem.focus();
}
}
}
Первый ожидаемый параметр - это идентификатор элемента, в который вы хотите вставить курсор клавиатуры. Если элемент не может быть найден, ничего не произойдет (очевидно). Второй параметр - это индекс положения каретки. Ноль поместит каретку клавиатуры в начале. Если вы передадите число, большее, чем количество символов в значении элементов, то клавиатура будет вставлена в конце.
Протестировано на IE6 и выше, Firefox 2, Opera 8, Netscape 9, SeaMonkey и Safari. К сожалению, в Safari он не работает в сочетании с событием onfocus).
Пример использования вышеупомянутой функции, чтобы заставить клавиатуру переходить в конец всех текстовых областей на странице, когда они получают фокус:
function addLoadEvent(func) {
if(typeof window.onload != 'function') {
window.onload = func;
}
else {
if(func) {
var oldLoad = window.onload;
window.onload = function() {
if(oldLoad)
oldLoad();
func();
}
}
}
}
// The setCaretPosition function belongs right here!
function setTextAreasOnFocus() {
/***
* This function will force the keyboard caret to be positioned
* at the end of all textareas when they receive focus.
*/
var textAreas = document.getElementsByTagName('textarea');
for(var i = 0; i < textAreas.length; i++) {
textAreas[i].onfocus = function() {
setCaretPosition(this.id, this.value.length);
}
}
textAreas = null;
}
addLoadEvent(setTextAreasOnFocus);
if(elem.selectionStart)
прерывается, когда selectionStart равен 0, что также указано в ответе jhnns.elem.value = elem.value.replace(/^9/g,'+79')
в коде. На OperaMINI курсор после+
. эта функция не помогаетСсылка в ответе битая, эта должна работать (все кредиты идут на blog.vishalon.net ):
http://snipplr.com/view/5144/getset-cursor-in-html-textarea/
В случае, если код снова теряется, вот две основные функции:
источник
Поскольку на самом деле мне действительно нужно это решение, а типичное базовое решение ( сфокусировать ввод - затем установить значение равным себе ) не работает в кросс-браузерном режиме , я потратил некоторое время на настройку и редактирование всего, чтобы оно работало. Основываясь на коде @ kd7 , вот что я придумала.
Наслаждайтесь! Работает в IE6 +, Firefox, Chrome, Safari, Opera
Кросс-браузерная техника позиционирования каретки (пример: перемещение курсора в КОНЕЦ)
Мясо и картофель - это в основном setCaretPosition @ kd7 , с самой большой настройкой
if (el.selectionStart || el.selectionStart === 0)
в firefox, selectionStart начинается с 0 , что в логическом значении, конечно, превращается в False, поэтому оно ломалось там.В chrome самой большой проблемой было то, что просто дать его
.focus()
было недостаточно (он продолжал выделять ВЕСЬ текст!). Следовательно, мы устанавливаем значение для себя, для себя,el.value = el.value;
прежде чем вызывать нашу функцию, и теперь у него есть понимание и позиция с ввод для использования selectionStart .источник
.onclick
вместо того,.onfocus
чтобы использовать функцию search_field_focusel.value = el.value; [...] if(el !== null)
- Я бы поменял эти две строки. Еслиel
ноль,el.value = el.value
произойдет сбой, поэтому строка должна быть внутриif
.Я немного скорректировал ответ kd7, потому что elem.selectionStart будет иметь значение false, когда selectionStart случайно равен 0.
источник
Я нашел простой способ исправить эту проблему, протестирован в IE и Chrome:
Передайте идентификатор текстового поля и позицию каретки в эту функцию.
источник
Если вам нужно сфокусировать какое-то текстовое поле, и ваша единственная проблема заключается в том, что весь текст выделяется, тогда как вы хотите, чтобы каретка была в конце, тогда в этом конкретном случае вы можете использовать этот трюк для установки значения текстового поля себе после фокуса:
источник
источник
источник
tID
должен быть id элемента, а не сам объект элемента. Если вы передаете объект элемента, вы можете просто удалить 2 первые строки в этом методе, и он будет работать.Я бы исправил условия как ниже:
источник