我想插入一些特殊字符在文本框中的插入符號上使用按鈕上的JavaScript。如何才能做到這一點?如何使用javascript在插入符處插入字符?
該腳本需要找到活動文本框並將該字符插入該文本框中的插入符處。該腳本還需要在IE和Firefox中工作。
編輯:也可以在前面的活動文本框中插入字符「last」。
我想插入一些特殊字符在文本框中的插入符號上使用按鈕上的JavaScript。如何才能做到這一點?如何使用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';
}
我覺得傑森·科恩是不正確。當焦點丟失時,插入位置將被保留。
[編輯:增加了對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。我不知道如何重新定位光標,使它停留在插入點。
在FF 4中,這可以通過`elem.setSelectionRange(from,to)`完成,並使用'from'和'to'的相同值,您可以使用curpos var +插入字符串的長度,如下所示:` elem.setSelectionRange(curpos + newstring.length,curpos + newstring.length)`假設使用newstring而不是管道。 我不知道如何在IE中實現這一點,但...我沒有在任何其他瀏覽器上測試過這個... – Flatline 2011-05-31 04:13:18
在前面的回答@bmb代碼中的屠殺版本能很好地重新定位在插入字符的結束光標太:
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;
}
我不知道你是想說。如我的示例所示,即使是沒有焦點的元素,也可以獲得光標位置。 – bmb 2008-09-22 17:00:01