<HTML>
<HEAD>
<SCRIPT>
function storeCaret(textEl)
{
if(textEl.createTextRange)
textEl.caretPos = document.selection.createRange().duplicate();
}
function insertAtCaret(textEl,text){
if(textEl.createTextRange && textEl.caretPos){
var caretPos = textEl.caretPos;
caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == '' ? text + '' : text;
}
else
textEl.value  = text;
}
</SCRIPT>
</HEAD>
<BODY>
<FORM NAME="aForm">
<TEXTAREA NAME="aTextArea" ROWS="5" COLS="80" WRAP="soft" ONSELECT="storeCaret(this);" ONCLICK="storeCaret(this);" ONKEYUP="storeCaret(this);">测试测试测试测试测试测试</TEXTAREA>
<BR>
<INPUT TYPE="text" NAME="aText" SIZE="80" VALUE="要插入的文字">
<BR>
<INPUT TYPE="button" VALUE="在光标处插入" ONCLICK="insertAtCaret(this.form.aTextArea,this.form.aText.value);">
</FORM>
</BODY>
</HTML>

解决方案 »

  1.   

    楼上的老大,这段代码在IE里是正常的,但在FIREFOX中就不是插入了,而是把多行文本框的内容全部替换成要插入的文字了
      

  2.   

    <script type="text/javascript">
    function setCaret (textObj) {
    if (textObj.createTextRange) {
    textObj.caretPos = document.selection.createRange().duplicate();
    }
    }
    function insertAtCaret (textObj, textFeildValue) {
    if(document.all){ 
    if (textObj.createTextRange && textObj.caretPos) {
    var caretPos = textObj.caretPos;
    caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ?textFeildValue + ' ' : textFeildValue;
    }else{
    textObj.value = textFeildValue;
    }
    }else{
    if(textObj.setSelectionRange){
    var rangeStart = textObj.selectionStart;
    var rangeEnd = textObj.selectionEnd;
    var tempStr1 = textObj.value.substring(0,rangeStart);
    var tempStr2 = textObj.value.substring(rangeEnd);
    textObj.value = tempStr1 + textFeildValue + tempStr2;
    }else{
    alert("This version of Mozilla based browser does not support setSelectionRange");
    }
    }
    }</script><form id="form1" action="" onsubmit="" method="post" enctype="text/plain"> 
    <p>
    <textarea name="tarea" rows="" cols="" style="width:300px;height:120px;"
    onselect="setCaret(this);"
    onclick="setCaret(this);"
    onkeyup="setCaret(this);" >例子例子例子例子例子</textarea>
    <br/><br/>
    <input type="text" name="textfield" style="width:220px;" value="插入FireFox"/>
    <br/>
    <input type="button" value="插入"
    onclick="insertAtCaret(this.form.tarea,this.form.textfield.value);"/>
    </p>
    </form>