jquery 光标 移动 到 文本 字段 的 开头

t3irkdon  于 2022-11-22  发布在  jQuery
关注(0)|答案(1)|浏览(174)

我 在 使用 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;
}

格式
整个 类 显然 要 大 得 多 , 这 不是 我 的 代码 , 但 我 猜 这 是 最 后 一 个 被 执行 的 代码 .

oug3syen

oug3syen1#

对不起 , 我 是 不是 漏掉 了 什么 ? 你 是 想 把 光标 移 到 末尾 , 还是 突出 显示 范围 ? 你 的 问题 似乎 暗示 了 前者 , 但 解决 方案 实现 了 后者 。
如果 您 只 想 将 光标 设置 到 末尾 , 则 不 需要 执行 上述 功能 。 设置 焦点 后 , 只需 执行 以下 操作 即可 :

input.value = input.value; //assumes input is a DOM element.

中 的 每 一 个
请 参阅 此 JSF iddle :http://jsfiddle.net/7vdv6/ 的 最 大 值

    • 编辑 : * *

据 我 所 知 , 有 一 大堆 东西 可能 会 转移 注意 力 , 从 你 的 输入 :

isFocused = true;
valueDivElement.hide();
labelElement.html(labelFocus);
if (currentData.selectedEntityCode) {
    inputElement.val(currentData.selectedEntityCode);
    inputElement.attr('title', currentData.selectedEntityCode);
} else {

}

格式
如果 在 最 后 两 行 之间 添加 一 个 focus ( ) , 会 发生 什么 情况 :

var input = document.getElementsByTagName("input")[0];
input.focus();
input.value = input.value;

格式
您 还 得到 了 jQuery 和 标准 JavaScript 的 相当 混乱 的 混合 。 例如 , 当 您 可以 使用 $("input:first") 时 , 为什么 要 使用 document.getElementsByTagName("input")[0]

相关问题