javascript - 单击时移动文本插入点(插入符号)

标签 javascript html textinput caret

为了通过捕获表单中的误点击来增强用户体验,我在每个文本字段周围的边框上使用以下代码:

focusMethod = function getFocus() {           
  document.getElementById("myTextField").focus();
}

这对于将焦点设置在距离用户单击位置最近的文本字段上效果很好,即使不是直接在文本字段本身上。但是,文本插入点(插入符号)始终自动放置在输入的左侧,而不是输入的最近的 x 点。

使用 vanilla JS,我怎样才能更进一步,找到文本插入点(插入符号)并将其移动到距离用户点击位置最近的位置(假设该字段中有文本)?

图片: what I have now | what I want to happen

最佳答案

您可以覆盖一种较大的黑客文本输入,然后使用其中的文本定位作为真正的输入。

否则,确定字符位置真的非常困难...字体很奇怪,而且据我所知,在 js 中无法确定它们的确切位置。

const byId = (id) => document.getElementById(id);
const on = (el, event, cb) => el.addEventListener(event, cb);

const textEl = byId("Text");
const hackEl = byId("Hack");

on(textEl, "input", () => hackEl.value = textEl.value);

on(hackEl, "click", () => {
  const charFocusPos = hackEl.selectionStart;
  textEl.focus();
  textEl.selectionStart = textEl.selectionEnd = charFocusPos;
});
#Container {
  position: relative;
  display: inline-block;
}

#Hack {
  transform: translate(-50%, -50%) scaleY(5);
  position: absolute;
  top: 50%;
  left: 50%;
  width: 100%;
  opacity: 0;
  padding-top: 0px;
  padding-bottom: 0px;
  height: 16px;
  border: none;
  outline: none;
}


#Hack.showOnHover:hover {
  opacity: 0.1;
}

#Hack, #Text {
  font-size: 16px;
  font-family: arial;
}
<div id="Container">
  <input type="textbox" id="Text">
  <input type="textbox" id="Hack"></div>
</div>

<button onClick="byId('Hack').classList.toggle('showOnHover')">Toggle Hack Layer</div>

关于javascript - 单击时移动文本插入点(插入符号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59869131/

相关文章:

javascript - Disqus 通用代码无法使用新的 disqus_identifier

android - TextInput 键入的文本未出现在 android 上

python - 在 python 的 mechanize 模块中写入文本输入时出现问题

javascript - 如何使用 Javascript 将用户带到特定的选项卡?

javascript - Bootstrap 工具提示看起来很简单

python - 无法正确读取 html 页面中的日期列并设置其格式

javascript - 如何在 &lt;input&gt; 元素内创建标签并为其设置样式?

javascript - 我应该把我的 JavaScript 库的版本号放在文件名中吗?

javascript - 具有 attr 绑定(bind)的数据绑定(bind)动态命名的 data-* 属性

JavaScript google maps API - 一次打开一个信息窗口..