我如何用JavaScript在Caret上插入角色?

问题描述 投票:0回答:4
我想使用按钮上的JavaScript在文本框内插入一些特殊字符。如何做到?

脚本需要查找活动文本框并将字符插入该文本框中的Caret。该脚本还需要在IE和Firefox中工作。

Edit:

也可以在先前有效的文本框中插入“最后”字符。

我认为杰森·科恩(Jason Cohen)不正确。 当焦点丢失时,将保留套筒位置。
javascript
4个回答
4
投票
eDit

:添加了我最初没有的firefox代码。]

[eDit:添加了代码以确定最新的活动文本框。]

首先,您可以使用每个文本框的Onblur事件将变量设置为“此”,以便您始终知道最新的活动文本框。

然后,有一种IE的方法可以使光标位置也可以在Opera中起作用,而在Firefox中的一种更简单的方法。 在IE中,基本概念是使用文档。选择对象和upput

一些文本

Into

选择。然后,使用索引,您可以获取添加的文本的位置。

在Firefox中,有一种称为SelectionStart的方法,它将为您提供光标位置。

在您具有光标位置时,您会覆盖整个文本。

文本在光标位置之前 +要在光标位置之后插入文本的文本 这里是一个示例,具有IE和Firefox的单独链接。 您可以使用您喜欢的浏览器检测方法来找出运行的代码。 <html><head></head><body> <script language="JavaScript"> <!-- var lasttext; function doinsert_ie() { var oldtext = lasttext.value; var marker = "##MARKER##"; lasttext.focus(); var sel = document.selection.createRange(); sel.text = marker; var tmptext = lasttext.value; var curpos = tmptext.indexOf(marker); pretext = oldtext.substring(0,curpos); posttest = oldtext.substring(curpos,oldtext.length); lasttext.value = pretext + "|" + posttest; } function doinsert_ff() { var oldtext = lasttext.value; var curpos = lasttext.selectionStart; pretext = oldtext.substring(0,curpos); posttest = oldtext.substring(curpos,oldtext.length); lasttext.value = pretext + "|" + posttest; } --> </script> <form name="testform"> <input type="text" name="testtext1" onBlur="lasttext=this;"> <input type="text" name="testtext2" onBlur="lasttext=this;"> <input type="text" name="testtext3" onBlur="lasttext=this;"> </form> <a href="#" onClick="doinsert_ie();">Insert IE</a> <br> <a href="#" onClick="doinsert_ff();">Insert FF</a> </body></html> 这也将与Textareas合作。 我不知道如何重新放置光标,因此它停留在插入点。

在您的更新中:

var inputs = document.getElementsByTagName('input'); var lastTextBox = null; for(var i = 0; i < inputs.length; i++) { if(inputs[i].getAttribute('type') == 'text') { inputs[i].onfocus = function() { lastTextBox = this; } } } var button = document.getElementById("YOURBUTTONID"); button.onclick = function() { lastTextBox.value += 'PUTYOURTEXTHERE'; }

注意,如果用户按下按钮,则将重点放在文本框上,并且将不会有镜头位置!

    


1
投票

Mytextarea.value='文本插入文本区域的文本介于此处';


我不确定您是否可以捕获Caret位置,但是,如果可以的话,可以使用文本框的

0
投票
事件来捕获Jason Cohen的关注(相对于字符串)。


0
投票

var lasttext; function doinsert_ie() { var ttInsert = "bla"; lasttext.focus(); var sel = document.selection.createRange(); sel.text = ttInsert; sel.select(); } function doinsert_ff() { var oldtext = lasttext.value; var curposS = lasttext.selectionStart; var curposF = lasttext.selectionEnd; pretext = oldtext.substring(0,curposS); posttest = oldtext.substring(curposF,oldtext.length); var ttInsert='bla'; lasttext.value = pretext + ttInsert + posttest; lasttext.selectionStart=curposS+ttInsert.length; lasttext.selectionEnd=curposS+ttInsert.length; }

© www.soinside.com 2019 - 2024. All rights reserved.