点击textarea外面就会失去插入位置

时间:2016-03-30 22:28:26

标签: javascript jquery html

我创建了一个textarea和一个按钮。单击该按钮时,我想在textarea中光标的当前位置添加字母“a”。以下是我目前的代码:

$('button.buttonA').click(function(){
    var cursorPos = $('textarea.formInsideMenu').prop('selectionStart');
    var textCurrent = $('textarea.formInsideMenu').val();
    var textBefore = textCurrent.substring(0, cursorPos);
    var textAfter = textCurrent.substring(cursorPos, textCurrent.length);

    $('textarea.formInsideMenu').val(textBefore + 'a' + textAfter);

});

当焦点在textarea上时,上面的代码工作正常,(在正确的位置插入'a');但是一旦我点击按钮,我就会失去textarea的焦点,并且光标不再显示。如果我在此之后再次单击该按钮,则在文本的最末尾附加“a”(似乎光标移动到文本的末尾)。无论如何都要跟踪光标在textarea中的位置,即使点击了其他东西并且textarea失去了焦点?

4 个答案:

答案 0 :(得分:1)

完成插入操作后,需要将textarea重点放在后面并设置插入位置:

$('button.buttonA').click(function() {
  var area   = $('textarea.formInsideMenu'),
      curPos = area.prop('selectionEnd');// at the caret **or after selected text**

  area.val( area.val().substring(0, curPos) + 'a' + area.val().substring(curPos) )
      .focus()
      .prop({'selectionStart': curPos+1, 'selectionEnd': curPos+1});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<button class="buttonA">Add an a</button> <br>
<textarea class="formInsideMenu"></textarea>

答案 1 :(得分:1)

此版本仅在从jQuery返回dom对象后才使用javascript:

$('button.buttonA').click(function(){
    var text = $('textarea.formInsideMenu').get(0);
    var start = text.selectionStart;
    text.value = text.value.slice(0,start) + 'a' + text.value.slice(start);
    text.setSelectionRange(start+1,start+1);
    text.focus();
});

小提琴here

答案 2 :(得分:0)

插入&#39; a&#39;。

后使用setSelectionRange
goal_expansion/5

https://jsfiddle.net/ny82n5kn/

答案 3 :(得分:0)

你可以在textarea上做一个更改事件,你可以在那里疼痛光标的位置,如下所示:

#include <stdio.h>
#include <cs50.h>

/* PSET1 Mario */

int main (void)

{
  int height;

do
{
    printf("Give me an int between 0 or 23 \n");
    height = GetInt();
}while((height < 0)||(height > 23));

//The Pyramid output
int row, space;

space = height - 1;


    for (row = 0 ; row <= height; row++)
    {

            for (space = 0; space < row; space--)
    {
        printf("#");
    }



return 0;

现在它可以在clickhandler中使用。