Перемещает курсор в начало текстового поля
у меня есть определенная проблема с IE8 (и только IE), когда я фокусирую поле ввода, в котором есть текст, курсор перемещается в начало этого поля. Я пытаюсь установить курсор в конец. Я погуглил и нашел следующее решение:
function setSelectionRange(input, selectionStart, selectionEnd) {
input = document.getElementsByTagName("input")[0];
if (input.createTextRange) {
var range = input.createTextRange();
range.collapse(true);
range.moveEnd('character', selectionEnd);
range.moveStart('character', selectionStart);
range.select();
}
}
"вход" здесь просто поле ввода, которое находится в классе (var inputElement = this.input;). Проблема в том, что и "setSelectionRange" и "createTextRange". Я делаю что-то не так? CreateTextRange определяется только для Окна?
@Edit: Ну, похоже, я использовал что-то вроде "двух объектов" ввода js и ввода jquery после изменения ввода в документ.getElementsByTagName ("input") [0]; я могу перейти в ветку" createTextRange", но она по-прежнему не изменяет положение курсора.
@Edit2: я немного изменил код, теперь я получаю ввод из документа, и он входит в ветку if. Но тогда браузер показывает мне:
Unexpected call to method or property access.
на этой линии var range = input.createTextRange();
@Edit3: чтобы ответить на вопрос Джеймса. У меня есть класс и в этом классе, все это связано с JSP, которая имеет вход. В этом классе я устанавливаю обработчик фокуса для поля, которое связано с входной формой jsp inputElement.focus(onInputFocus) тогда у меня что-то вроде этого:
function onInputFocus() {
isFocused = true;
valueDivElement.hide();
labelElement.html(labelFocus);
if (currentData.selectedEntityCode) {
inputElement.val(currentData.selectedEntityCode);
inputElement.attr('title', currentData.selectedEntityCode);
} else {
}
var input = document.getElementsByTagName("input")[0];
input.value = input.value;
}
весь класс, очевидно, намного больше, и это не мой код, но я предполагаю, что это последнее, что выполняется.
1 ответов
Извините, я что-то пропустил? Вы пытаетесь установить курсор в конец или выделить диапазон? Ваш вопрос, казалось бы, подразумевает первое, но решение достигает последнего.
если вы просто хотите, чтобы установить курсор в конец, то эта функция не нужна. Просто сделайте следующее, Как только фокус будет установлен:
input.value = input.value; //assumes input is a DOM element.
см. этот JSFiddle: http://jsfiddle.net/7vdv6/
EDIT:
насколько я вижу, есть целая куча вещей, которые могут отвлекать внимание от вашего ввода:
isFocused = true;
valueDivElement.hide();
labelElement.html(labelFocus);
if (currentData.selectedEntityCode) {
inputElement.val(currentData.selectedEntityCode);
inputElement.attr('title', currentData.selectedEntityCode);
} else {
}
что произойдет, если вы добавите focus () между последними двумя строками:
var input = document.getElementsByTagName("input")[0];
input.focus();
input.value = input.value;
у вас также есть довольно грязное сочетание jQuery и стандартного JavaScript. Например, почему вы используете document.getElementsByTagName("input")[0] когда вы могли бы использовать $("input:first")??