我 在 使用 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();
}
}
中 的 每 一 个
这里 的 " Input " 只是 一 个 输入 字段 , 它 在 一 个 类 ( var inputElement = this.input;
) 中 。 问题 是 " setSelectionRange " 和 " createTextRange " 都 存在 。 我 做 错 了 什么 吗 ? createTextRange 只 为 TextArea 定义 了 吗 ?
@编辑 : 看来 我 是 用 了 类似 " 两 个 对象 " 的 东西 , 一 个 js 输入 , 一 个 jquery 输入 , 在 把 输入 改成 document 之后 。 getElementsByTagName ( " input " ) [ 0 ] ;我 可以 转到 " createTextRange " 分支 , 但 它 仍然 不会 更改 光标 的 位置 。
@Edit2 : 我 稍微 修改 了 一下 代码 , 现在 我 从 文档 中 获取 输入 , 它 进入 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;
}
格式
整个 类 显然 要 大 得 多 , 这 不是 我 的 代码 , 但 我 猜 这 是 最 后 一 个 被 执行 的 代码 .
1条答案
按热度按时间oug3syen1#
对不起 , 我 是 不是 漏掉 了 什么 ? 你 是 想 把 光标 移 到 末尾 , 还是 突出 显示 范围 ? 你 的 问题 似乎 暗示 了 前者 , 但 解决 方案 实现 了 后者 。
如果 您 只 想 将 光标 设置 到 末尾 , 则 不 需要 执行 上述 功能 。 设置 焦点 后 , 只需 执行 以下 操作 即可 :
中 的 每 一 个
请 参阅 此 JSF iddle :http://jsfiddle.net/7vdv6/ 的 最 大 值
据 我 所 知 , 有 一 大堆 东西 可能 会 转移 注意 力 , 从 你 的 输入 :
格式
如果 在 最 后 两 行 之间 添加 一 个 focus ( ) , 会 发生 什么 情况 :
格式
您 还 得到 了 jQuery 和 标准 JavaScript 的 相当 混乱 的 混合 。 例如 , 当 您 可以 使用
$("input:first")
时 , 为什么 要 使用document.getElementsByTagName("input")[0]
?