我对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;
}
整个班级显然要大得多,这不是我的代码,但我猜这是最后一件正在执行的事情。
答案 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")