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)
整个班级显然要大得多,这不是我的代码,但我猜这是最后一件正在执行的事情.
抱歉,我在这里遗漏了什么吗?您是否尝试将光标设置到末尾,或突出显示范围?你的问题似乎暗示着前者,但解决方案实现了后者。
如果你只是想将光标设置到末尾,那么上面的函数就没有必要了。设置焦点后,只需执行以下操作:
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")??