Поскольку на самом деле мне действительно нужно это решение, а типичное базовое решение ( сфокусировать ввод - затем установить значение равным себе ) не работает в кросс-браузерном режиме , я потратил некоторое время на настройку и редактирование всего, чтобы оно работало. Основываясь на коде @ kd7 , вот что я придумала.
Наслаждайтесь! Работает в IE6 +, Firefox, Chrome, Safari, Opera
Кросс-браузерная техника позиционирования каретки (пример: перемещение курсора в КОНЕЦ)
// ** USEAGE ** (returns a boolean true/false if it worked or not)
// Parameters ( Id_of_element, caretPosition_you_want)
setCaretPosition('IDHERE', 10); // example
Мясо и картофель - это в основном setCaretPosition @ kd7 , с самой большой настройкой if (el.selectionStart || el.selectionStart === 0)
в firefox, selectionStart начинается с 0 , что в логическом значении, конечно, превращается в False, поэтому оно ломалось там.
В chrome самой большой проблемой было то, что просто дать его .focus()
было недостаточно (он продолжал выделять ВЕСЬ текст!). Следовательно, мы устанавливаем значение для себя, для себя, el.value = el.value;
прежде чем вызывать нашу функцию, и теперь у него есть понимание и позиция с ввод для использования selectionStart .
function setCaretPosition(elemId, caretPos) {
var el = document.getElementById(elemId);
el.value = el.value;
// ^ this is used to not only get "focus", but
// to make sure we don't have it everything -selected-
// (it causes an issue in chrome, and having it doesn't hurt any other browser)
if (el !== null) {
if (el.createTextRange) {
var range = el.createTextRange();
range.move('character', caretPos);
range.select();
return true;
}
else {
// (el.selectionStart === 0 added for Firefox bug)
if (el.selectionStart || el.selectionStart === 0) {
el.focus();
el.setSelectionRange(caretPos, caretPos);
return true;
}
else { // fail city, fortunately this never happens (as far as I've tested) :)
el.focus();
return false;
}
}
}
}
if(elem.selectionStart)
прерывается, когда selectionStart равен 0, что также указано в ответе jhnns.