光标移动到文本字段的开头

时间:2010-11-23 09:34:50

标签: javascript jquery internet-explorer internet-explorer-8

我对IE8(并且只有IE)有一定的问题,当我聚焦一个有文本的输入字段时,光标移动到该字段的开头。我正在尝试将光标设置在最后。我用Google搜索并找到了以下解决方案:

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:在将输入更改为document.getElementsByTagName(“input”)[0]之后,似乎我正在使用类似“两个对象”的js输入和jquery输入。我可以转到“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 个答案:

答案 0 :(得分:4)

对不起,我在这里遗漏了什么?您是否尝试将光标设置为结尾,或突出显示范围?你的问题似乎暗示了前者,但解决方案实现了后者。

如果您只想将光标设置到末尾,则无需上述功能。设置焦点后,只需执行以下操作:

input.value = input.value; //assumes input is a DOM element.

请参阅此JSFiddle:http://jsfiddle.net/7vdv6/

修改

据我所知,有很多东西可能会把注意力转移到你的输入上:

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.focus();
input.value = input.value;

你也有很混乱的jQuery和标准JavaScript。例如,为什么在使用document.getElementsByTagName("input")[0] ??

时使用$("input:first")