如何使用javascript在插入符号中插入字符?

时间:2020-03-05 18:50:45  来源:igfitidea点击:

我想在按钮上使用javascript在文本框内的插入符号中插入一些特殊字符。如何才能做到这一点?

该脚本需要找到活动的文本框,并在该文本框中的插入符号处插入字符。该脚本还需要在IE和Firefox中运行。

编辑:也可以在先前活动的文本框中插入字符" last"。

解决方案

回答

请注意,如果用户按下按钮,则文本框上的焦点将丢失,并且没有插入符号的位置!

回答

遍历所有输入字段...
找到一个有重点的人。
然后当我们拥有文字区域时...
我们应该能够执行类似...

myTextArea.value ='要插入文本区域的文本在这里';

回答

我不确定是否可以捕获插入符号的位置,但是如果可以,可以通过使用文本框的onblur事件捕获位置(相对于字符串)来避免Jason Cohen的担心。

回答

根据更新:

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';
}

回答

我认为杰森·科恩(Jason Cohen)是不正确的。失去焦点时,插入符号的位置将保留。

[编辑:添加了我最初没有的FireFox代码。]

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

首先,可以使用每个文本框的onBlur事件将变量设置为" this",以便始终了解最新的活动文本框。

然后,有一种获取光标位置的IE方法在Opera中也可以使用,而在Firefox中则更简单。

在IE中,基本概念是使用document.selection对象并将一些文本放入选择中。然后,使用indexOf,可以获得添加的文本的位置。

在FireFox中,有一个名为selectionStart的方法将为我们提供光标位置。

一旦有了光标位置,就可以用覆盖整个text.value

光标位置之前的文本+我们要插入的文本+光标位置之后的文本

这是带有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。我不知道如何重新定位光标,使其停留在插入点。