我创建了一个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失去了焦点?
答案 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)
答案 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中使用。