我在使用IE8时遇到一个问题,当我聚焦在一个已有文本的输入框上时,光标会跑到该输入框的开头。我想把光标设置到末尾。我在谷歌上搜索到了以下解决方案:
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”只适用于文本区域吗?@编辑:好像我正在使用“两个对象”,一个是js输入,另一个是jquery输入,将输入更改为document.getElementsByTagName("input")[0];之后,我能够进入“createTextRange”分支,但仍然无法更改光标位置。
@编辑2:我稍微修改了代码,现在从文档中获取输入并进入if分支。但是浏览器显示:
Unexpected call to method or property access.
在这一行中
var range = input.createTextRange();
@Edit3: 回答James的问题。我有一个类,整个类都与一个jsp相关联,该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;
}
整个类显然要大得多,这不是我的代码,但我猜这应该是最后执行的事情。
<input type="text">
元素。你确定你传递的元素是一个 DOM 输入元素吗? - Tim Down