当用户单击按钮(在光标位置)时,在输入字段中添加一个文本字符串

Add a string of text into an input field when user clicks a button (At Cursor Location)

本文关键字:字符串 添加 文本 字段 一个 按钮 单击 用户 光标 位置 输入      更新时间:2023-09-26

我在这里找到了我需要的大部分解决方案:

当用户点击按钮时,在输入字段中添加一个文本字符串

问题是我需要在光标位置的文本区域框中添加文本——该页面上的解决方案将文本字符串添加到文本区域框内容的末尾。

这是我的HTML:

<textarea style="width:500px; height: 150px;" id="text">This is some text</textarea>


这是我的Javascript:

$(function () {
$('#button').on('click', function () {
    var text = $('#text');
    text.val(text.val() + "'n'nafter clicking");    
});
$('#button2').on('click', function () {
    var text = $('#text');
    text.val(text.val() + "'n'nafter clicking 2");    
});  });

以下是我的JS对到目前为止一切工作的处理:

https://jsfiddle.net/2m8L3y3n/

我基本上希望插入的文本不仅在底部,而且在文本区域框中光标所在的位置。。。

此外,如果我在一个页面上有多个文本区域框,如何让按钮绑定到特定的文本区域框?在我的JS fiddle上,我有两个框,但只有第一个有效——有没有办法做到这一点,这样我就不必为每个框都有一个新的javascript代码?我可能在一个页面上有大约10个文本区域框,每个框都有自己的一组按钮,所以我试图保持代码的可管理性。

非常感谢您的帮助!

我已经编写了一个如何实现这一点的示例函数。

https://jsfiddle.net/axcufrd0/2/

function insertText(text)
{
    var $textbox = $("#text");
    var textStr  = $textbox.text();
    var startPos = $textbox[0].selectionStart;
    var endPos   = $textbox[0].selectionEnd;
    // If set to true, the selection will NOT be replaced.
    // Instead, the text will be inserted before the first highlighted character.
    if (false)
    {
        endPost = startPos;
    }
    var beforeStr = textStr.substr(0, startPos);
    var afterStr  = textStr.substr(endPos, textStr.length);
    textStr = beforeStr + text + afterStr;
    $textbox.text(textStr);
    return textStr;
}

这样,我们希望将文本拆分,然后将其与新内容连接起来。根据您的操作方式,您可能希望替换选择文本,或者直接在前面或后面追加。

对于这段代码,我没有花时间解决的一个警告是,默认情况下,选择文本是0到0。这意味着没有任何选择将文本附加到文本框的最前面。

您需要获取光标位置(索引),并使用子字符串拆分文本区域文本,并将字符串连接在一起以获得新文本:

有关获取光标位置的详细信息,请参阅此答案。

$(function () {
  $.fn.getCursorPosition = function() {
    var el = $(this).get(0);
    var pos = 0;
    if('selectionStart' in el) {
      pos = el.selectionStart;
    } else if('selection' in document) {
      el.focus();
      var Sel = document.selection.createRange();
      var SelLength = document.selection.createRange().text.length;
      Sel.moveStart('character', -el.value.length);
      pos = Sel.text.length - SelLength;
    }
    return pos;
  };
  $('#button').on('click', function () {
    var text = $('#text');
    var cursorLocation = text.getCursorPosition();
    var originalText = text.val();
    var newText = originalText.substring(0, cursorLocation) + 'after clicking' + originalText.substring(cursorLocation);
    text.val(newText);
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea style="width:500px; height: 150px;" id="text">This is some text</textarea>
<button id="button">Click Me</button>

您可以尝试一下----------------

function insertAtCaret(areaId, text) {
        var txtarea = document.getElementById(areaId);
        var scrollPos = txtarea.scrollTop;
        var strPos = 0;
        var br = ((txtarea.selectionStart || txtarea.selectionStart == '0') ?
                "ff" : (document.selection ? "ie" : false));
        if (br == "ie") {
            txtarea.focus();
            var range = document.selection.createRange();
            range.moveStart('character', -txtarea.value.length);
            strPos = range.text.length;
        }
        else if (br == "ff")
            strPos = txtarea.selectionStart;
        var front = (txtarea.value).substring(0, strPos);
        var back = (txtarea.value).substring(strPos, txtarea.value.length);
        txtarea.value = front + text + back;
        strPos = strPos + text.length;
        if (br == "ie") {
            txtarea.focus();
            var range = document.selection.createRange();
            range.moveStart('character', -txtarea.value.length);
            range.moveStart('character', strPos);
            range.moveEnd('character', 0);
            range.select();
        }
        else if (br == "ff") {
            txtarea.selectionStart = strPos;
            txtarea.selectionEnd = strPos;
            txtarea.focus();
        }
        txtarea.scrollTop = scrollPos;
    }
<textarea style="width:500px; height: 150px;" id="text"></textarea>
    <br />
    <input type="button" onclick="insertAtCaret('text', ' text to insert')" value="Click Me to add Text" id="button" />
    <input type="button" onclick="insertAtCaret('text', ' Hello Man')" value="Click Me to add Text" id="button" />

引用

代码:获取光标当前位置的功能

function getCaret(el) {
  if (el.selectionStart) {
    return el.selectionStart;
  } else if (document.selection) {
    el.focus();
    var r = document.selection.createRange();
    if (r == null) {
      return 0;
    }
    var re = el.createTextRange(),
      rc = re.duplicate();
    re.moveToBookmark(r.getBookmark());
    rc.setEndPoint('EndToStart', re);
    return rc.text.length;
  }
  return 0;
}

点击按钮2:

$('#button2').on('click', function() {
  var text = document.getElementById('text');
  var position = getCaret(text);
  console.log(position);
  console.log(text);
  //text.val(text.val() + "'n'nafter clicking 2");
  var currentPos = getCaret(text);
  //alert(currentPos);
  var strLeft = text.value.substring(0, currentPos);
  var strMiddle = "String to add";
  var strRight = text.value.substring(currentPos, text.value.length);
  text.value = strLeft + strMiddle + strRight;
});

如果有什么不清楚的地方,请告诉我。