jquery selection开始忽略Chrome中文本区域的新行/换行符

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

我 正在 尝试 将 文本 插入 到 文本 区域 中 光标 所在 的 位置 , 或者 替换 选定 的 一 段 文本 。 该 代码 的 工作 原理 是 插入 文本 , 如果 选定 了 一 段 文本 , 则 替换 该 文本 。
问题 是 , 如果 用户 先 插入 几 个 换行符 , 然后 尝试 插入 文本 。 然后 不是 在 光标 所在 的 位置 插入 文本 , 而是 在 第 二 行 插入 文本 。 因此 , 例如 , 如果 用户 插入 换行符 并 在 第 5 行 结束 , 然后 单击 输入 插入 文本 , 则 文本 将 插入 第 2 行 。

var holdFocus;
function updateFocus(x) {
  holdFocus = x;
}

中 的 每 一 个
触发 者 :

<textarea onFocus="updateFocus(this)" cols="53" rows="10" name="entry" id="report" style="width: 98%;"></textarea>

格式
然后 插入 文字 :

function InsertCodeInTextArea(text){
    var tav    = $(holdFocus).val(),
    strPos = $(holdFocus)[0].selectionStart;
    var endPos = $(holdFocus)[0].selectionEnd;
    front  = (tav).substring(0,strPos),
    back   = (tav).substring(endPos,tav.length);
    var textValue = text.split("%lb%").join("\r\n");
    $(holdFocus).val(front+ textValue + back);
}

格式
通过 单击 以下 项 触发 :

<input class="input" type="button" name="LODCTRRAPPA" value ="LODCTRRAPPA" onClick="InsertCodeInTextArea('Location: %lb%Onset: %lb%Duration: %lb%Course: %lb%Type of pain/symptom: %lb%')"/>

格式
这个 问题 似乎 只 发生 在 Chrome 浏览 器 。 Safari 和 FF 还好 。 没有 测试 IE 。 我 敢 肯定 , 这 也 没有 发生 , 直到 几 个 星期 前 。

fjaof16o

fjaof16o1#

# 使用 普通 JavaScript

jQuery docs on val() 开始 :
注意 : 目前 , 在 元素 上 使用 . val ( ) 会 从 浏览 器 报告 的 值 中 删除 回车 符 。 但是 , 当 此 值 通过 XHR 发送 到 服务 器 时 , 回车 符 会 被 保留 ( 或 由 不 将 其 包含 在 原始 值 中 的 浏览 器 添加 ) 。 此 问题 的 解决 方法 可以 使用 valHook , 如下 所 示 :
$.valHooks.textarea = { get: function( elem ) { return elem.value.replace( /\r?\n/g, "\r\n" ); } };
下面 的 代码 就 足够 了 :
第 一 个

# 更新

It's a bug! See productforums.google.com
... 如果 您 单击 退出 文本 区域 , 然后 单击 返回 , 然后 单击 按钮 , 错误 现在 消失 了 , 它 工作 。
测试 了 我 的 代码 片段 , 它 确实 工作 后 , 点击 ( 失去 焦点 ) , 然后 点击 回来 ( 重新 获得 焦点 ) 。
这 显然 会 导致 所 做 的 任何 选择 丢失 , 并且 要求 用户 这样 做 是 不 切 实际 的 。
如果 我 找到 一 个 程序 化 的 解决 方法 , 我 会 更新 这个 答案 。

相关问题