获取文本框中的当前光标位置

IT技术 javascript firefox textbox cursor
2021-03-09 08:44:27

我需要一个代码来在 textbox/textarea 中查找光标的当前位置它应该适用于 chrome 和 firefox。以下是我正在使用的代码:

<!DOCTYPE html>
<html>
  <head>
    <script>
      function textbox()
      {
        document.getElementById('Javascript_example').value = document.activeElement.id;
        var ctl = document.getElementById('Javascript_example');
        alert(ctl);

        var startPos = ctl.selectionStart;
        alert(startPos);
        var endPos = ctl.selectionEnd;
        alert(endPos);
      }
    </script>
  </head>
  <body>

    <input id="Javascript_example" name="one" type="text" value="Javascript_example" onclick="textbox()">

  </body>
</html>

有什么建议吗?

2个回答

除了您的 ID 属性中的空格(无效)以及您在检查选择之前替换输入值这一事实之外,它看起来还可以。

function textbox()
{
        var ctl = document.getElementById('Javascript_example');
        var startPos = ctl.selectionStart;
        var endPos = ctl.selectionEnd;
        alert(startPos + ", " + endPos);
}
<input id="Javascript_example" name="one" type="text" value="Javascript example" onclick="textbox()">

此外,如果您支持 IE <= 8,则需要注意这些浏览器不支持selectionStartselectionEnd

真的,你在逗我。我删除了 document.getElementById('Javascript_example').value = document.activeElement.id; 从我的代码行。它有效。不管怎样,谢谢你。你向我展示了正确的方式:)
2021-04-17 08:44:27

这是一种可能的方法。

function isMouseInBox(e) {
  var textbox = document.getElementById('textbox');

  // Box position & sizes
  var boxX = textbox.offsetLeft;
  var boxY = textbox.offsetTop;
  var boxWidth = textbox.offsetWidth;
  var boxHeight = textbox.offsetHeight;

  // Mouse position comes from the 'mousemove' event
  var mouseX = e.pageX;
  var mouseY = e.pageY;
  if(mouseX>=boxX && mouseX<=boxX+boxWidth) {
    if(mouseY>=boxY && mouseY<=boxY+boxHeight){
       // Mouse is in the box
       return true;
    }
  }
}

document.addEventListener('mousemove', function(e){
    isMouseInBox(e);
})
英语,有很多方法可以解释像光标一样简单的东西;)
2021-05-04 08:44:27
不,我想得到这个职位。比方说,如果我点击 JavaScript 并且插入点/carret 在 Java 之后,那么它应该返回 4
2021-05-13 08:44:27
啊我完全误解了,我将“光标”解释为鼠标光标。看看这个:stackoverflow.com/questions/5149683/...
2021-05-15 08:44:27