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

Mat*_*zyk 6 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

这里的"输入"只是一个类(var inputElement = this.input;)中的输入字段.问题是"setSelectionRange"和"createTextRange".难道我做错了什么?是否仅为TextArea定义了createTextRange?

@Edit:在将输入更改为document.getElementsByTagName("input")[0]之后,似乎我正在使用类似"两个对象"的js输入和jquery输入.我可以转到"createTextRange"分支,但它仍然不会改变光标的位置.

@ Edit2:我稍微更改了代码,现在我从文档中获取输入并进入if分支.但随后浏览器显示我:

Unexpected call to method or property access.
Run Code Online (Sandbox Code Playgroud)

在这条线上 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;
}
Run Code Online (Sandbox Code Playgroud)

整个班级显然要大得多,这不是我的代码,但我猜这是最后一件正在执行的事情.

Jam*_*man 4

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

如果你只是想将光标设置到末尾,那么上面的函数就没有必要了。设置焦点后,只需执行以下操作:

input.value = input.value; //assumes input is a DOM element.
Run Code Online (Sandbox Code Playgroud)

请参阅此 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 {

}
Run Code Online (Sandbox Code Playgroud)

如果在最后两行之间添加 focus() 会发生什么:

var input = document.getElementsByTagName("input")[0];
input.focus();
input.value = input.value;
Run Code Online (Sandbox Code Playgroud)

您还得到了 jQuery 和标准 JavaScript 的混乱组合。例如,document.getElementsByTagName("input")[0]当你可以使用 ?? 时,你为什么要使用$("input:first")??