2015-04-02 34 views
1

我需要在输入时添加静态文本到textarea。jquery如何将文本附加到文本区域,同时打字

var text= " my text"; 
$("#myInput").keydown(function() { 
    $("#myInput").val(this.value + text); 
}); 

上面的代码将“我的文本”添加到textarea,之后如果我继续输入,它将开始在“文本”字之后键入。我需要将光标始终保留在“我的文本”之前。

+0

你可以使用这种技术来将光标设置为你想要的cursorpostino:http://stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area – 2015-04-02 08:40:22

回答

0

有一个输入字段或一个文本,它是脏的,并不能很好的工作(删除时尤其是...)

var text= " my text"; 
 
$("#myInput").keyup(function() { 
 
    $(this).val(this.value.replace(text,"") + text); 
 
});
input{ 
 
    width : 500px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="myInput"/>

我宁愿使用contenteditable元素,一个:after纯CSS:

p{ 
 
    min-width : 300px; 
 
    border: grey solid 1px; 
 
} 
 
p:after{ 
 
    content:" my text" 
 
}
<p contenteditable></p>

+0

_I需要我的光标始终保持在“我的文本”之前._是否提及它? – Jai 2015-04-02 08:54:55

+0

就是这样。尝试一下。 – 2015-04-02 08:59:02

+0

似乎并不是我每次输入时都能看到游标的末尾。 – Jai 2015-04-02 09:01:16

2

你需要一个函数来获取光标的位置:

Get cursor position (in characters) within a text Input field

,并设置光标位置的功能:

jQuery Set Cursor Position in Text Area

然后,你可以做你想做的:

var text= "my text"; 
var textIsSet = false; 
$("#myInput").keydown(function() { 
    var cpos = doGetCaretPosition(this); 
    if(!textIsSet) { 
     $(this).val(this.value + text); 
     textIsSet = true; 
    } 
    setCaretToPos(this, cpos); 
}); 

这里是一个jsfiddle:http://jsfiddle.net/b69v5fvs/

+0

它的工作原理,但我用2行CSS做了60行javascript。我的答案被降低了。 – 2015-04-02 09:12:07

+0

您有一个聪明的解决方案,但不适用于OP问题。任务是与textarea一起工作。要在表单中使用contenteditable标记,需要使用更多的javascript。 – 2015-04-02 09:25:30

+0

我同意这一点。但如果偶然,他们可以使用除textarea以外的其他东西,我提供了一个更轻的替代解决方案。如果他们不能,那么你的答案最好=)所以+1也是。 – 2015-04-02 09:28:04