У меня есть определенная проблема с 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 только для TextArea?
@ Edit: похоже, я использовал что-то вроде «двух объектов» для ввода js и ввода jquery, после изменения ввода на document.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;
}
Весь класс, очевидно, намного больше, и это не мой код, но я предполагаю, что это последнее, что выполняется.