Перемещает курсор в начало текстового поля

у меня есть определенная проблема с 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")??