Inserting a text where cursor is using Javascript/jquery

前端 未结 13 2645
盖世英雄少女心
盖世英雄少女心 2020-11-22 03:58

I have a page with a lot of textboxes. When someone clicks a link, i want a word or two to be inserted where the cursor is, or appended to the textbox which has the focus.<

相关标签:
13条回答
  • 2020-11-22 04:28

    I think you could use the following JavaScript to track the last-focused textbox:

    <script>
    var holdFocus;
    
    function updateFocus(x)
    {
        holdFocus = x;
    }
    
    function appendTextToLastFocus(text)
    {
        holdFocus.value += text;
    }
    </script>
    

    Usage:

    <input type="textbox" onfocus="updateFocus(this)" />
    <a href="#" onclick="appendTextToLastFocus('textToAppend')" />
    

    A previous solution (props to gclaghorn) uses textarea and calculates the position of the cursor too, so it may be better for what you want. On the other hand, this one would be more lightweight, if that's what you're looking for.

    0 讨论(0)
  • 2020-11-22 04:29

    you can only focus required textbox an insert the text there. there is no way to find out where focus is AFAIK (maybe interating over all DOM nodes?).

    check this stackoverflow - it has a solution for you: How do I find out which DOM element has the focus?

    0 讨论(0)
  • 2020-11-22 04:33

    Maybe a shorter version, would be easier to understand?

        jQuery("#btn").on('click', function() {
            var $txt = jQuery("#txt");
            var caretPos = $txt[0].selectionStart;
            var textAreaTxt = $txt.val();
            var txtToAdd = "stuff";
            $txt.val(textAreaTxt.substring(0, caretPos) + txtToAdd + textAreaTxt.substring(caretPos) );
        });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    
    <textarea id="txt" rows="15" cols="70">There is some text here.</textarea>
    <input type="button" id="btn" value="OK" />

    I wrote this in response to How to add a text to a textbox from the current position of the pointer with jquery?

    0 讨论(0)
  • 2020-11-22 04:34

    The code above didn't work for me in IE. Here's some code based on this answer.

    I took out the getElementById so I could reference the element in a different way.

    function insertAtCaret(element, text) {
      if (document.selection) {
        element.focus();
        var sel = document.selection.createRange();
        sel.text = text;
        element.focus();
      } else if (element.selectionStart || element.selectionStart === 0) {
        var startPos = element.selectionStart;
        var endPos = element.selectionEnd;
        var scrollTop = element.scrollTop;
        element.value = element.value.substring(0, startPos) +
          text + element.value.substring(endPos, element.value.length);
        element.focus();
        element.selectionStart = startPos + text.length;
        element.selectionEnd = startPos + text.length;
        element.scrollTop = scrollTop;
      } else {
        element.value += text;
        element.focus();
      }
    }
    input{width:100px}
    label{display:block;margin:10px 0}
    <label for="in2copy">Copy text from: <input id="in2copy" type="text" value="x"></label>
    <label for="in2ins">Element to insert: <input id="in2ins" type="text" value="1,2,3" autofocus></label>
    <button onclick="insertAtCaret(document.getElementById('in2ins'),document.getElementById('in2copy').value)">Insert</button>

    EDIT: Added a running snippet, jQuery is not being used.

    0 讨论(0)
  • 2020-11-22 04:34

    This jQuery plugin gives you a pre-made way of selection/caret manipulation.

    0 讨论(0)
  • 2020-11-22 04:35

    Adding text to current cursor position involves two steps:

    1. Adding the text at the current cursor position
    2. Updating the current cursor position

    Demo: https://codepen.io/anon/pen/qZXmgN

    Tested in Chrome 48, Firefox 45, IE 11 and Edge 25

    JS:

    function addTextAtCaret(textAreaId, text) {
        var textArea = document.getElementById(textAreaId);
        var cursorPosition = textArea.selectionStart;
        addTextAtCursorPosition(textArea, cursorPosition, text);
        updateCursorPosition(cursorPosition, text, textArea);
    }
    function addTextAtCursorPosition(textArea, cursorPosition, text) {
        var front = (textArea.value).substring(0, cursorPosition);
        var back = (textArea.value).substring(cursorPosition, textArea.value.length);
        textArea.value = front + text + back;
    }
    function updateCursorPosition(cursorPosition, text, textArea) {
        cursorPosition = cursorPosition + text.length;
        textArea.selectionStart = cursorPosition;
        textArea.selectionEnd = cursorPosition;
        textArea.focus();    
    }
    

    HTML:

    <div>
        <button type="button" onclick="addTextAtCaret('textArea','Apple')">Insert Apple!</button>
        <button type="button" onclick="addTextAtCaret('textArea','Mango')">Insert Mango!</button>
        <button type="button" onclick="addTextAtCaret('textArea','Orange')">Insert Orange!</button>
    </div>
    <textarea id="textArea" rows="20" cols="50"></textarea>
    
    0 讨论(0)
提交回复
热议问题