当按下光标或箭头键时,如何获取文本区域中当前光标位置?

3

我正在尝试在单击鼠标下移时重新定位文本光标的位置。问题在于,由于“新”位置直到点击被释放才会被存储,因此selectionStartselectionEnd不会返回光标的最新位置。当您尝试使用鼠标重新定位插入符号时,代码片段显示了这个问题。

这很奇怪,因为从技术上讲,我可以在鼠标按下后立即在“新”位置进行输入,但是selectionStart仍然返回旧位置。如果光标位置可以明显更改而不必释放单击,那么如何在等待mouseup之前访问新位置?

(这对于跟踪按键按下后的光标位置也似乎是个问题)

const input = document.getElementById('myInput');
input.addEventListener('mousedown', showposition); // click

function showposition() {
  document.getElementById("output").innerHTML += " " + input.selectionStart;
}
<input id="myInput">
<p id="output"></p>

1个回答

1
使用click事件代替mousedown事件。这是因为在触发mousedown事件时,selectionStart尚未更新,这就是为什么您不断获得先前的值的原因。
另一方面,单击事件是mouseup+mousedown事件的组合,它捕获一个完整的鼠标单击并返回预期的光标位置值。

const input = document.getElementById('myInput');
input.addEventListener('click', showposition); // click

function showposition(event) {
  document.getElementById("output").innerHTML += " " + event.target.selectionStart;
}
<input id="myInput">
<p id="output"></p>


谢谢!是否有一个只考虑mousedown事件(而不是mouseup)的事件?例如,如果您单击索引2以重新定位光标,键入随机字符串,然后释放鼠标,则仍将输出“2”,而不是终点? - Jake
你找到答案了吗?你只能访问mousedown事件吗? - AmandaConda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接