【发布时间】:2010-11-23 23:27:56
【问题描述】:
我在使用 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 是否只为 TextArea 定义?
@Edit:在将输入更改为 document.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;
}
整个类显然要大得多,这不是我的代码,但我猜这是执行的最后一件事。
【问题讨论】:
-
此函数适用于
<input type="text">元素。您确定您传递的元素是 DOM 输入元素吗? -
是的,我仔细检查了它。现在的问题是“var range = input.createTextRange();”不知道为什么。它进入该分支,但在该行失败,其余部分未执行。
-
如果那里失败了,错误信息是什么?你把重点放在哪里?
-
我添加了收到的错误消息。我没有将焦点放在任何地方。
-
我只收到带有单选框/复选框的错误消息。是否可以使用 jsfiddle 创建 bug 的演示?
标签: javascript jquery internet-explorer internet-explorer-8