0

I have been using insertAtCaret to insert text at the current cursor position for textboxes however when the textbox becomes associated with an htmleditorextender it fails (I guess because the textbox is now a child element of the htmleditorextender or maybe it creates an iframe?).

Here is my insertAtCaret javascript that works fine when there's no htmleditorextender. The textbox associated with an htmleditorextender is txtEmailBody. Do I need to reference txtEmailBody differently?

function insertAtCaret(text) {
     var txtarea = document.getElementById("<%=txtEmailBody.ClientID%>")
     var scrollPos = txtarea.scrollTop;
     var strPos = 0;
     var br = ((txtarea.selectionStart || txtarea.selectionStart == '0') ?
    "ff" : (document.selection ? "ie" : false));
     if (br == "ie") {
         txtarea.focus();
         var range = document.selection.createRange();
         range.moveStart('character', -txtarea.value.length);
         strPos = range.text.length;
     }
     else if (br == "ff") strPos = txtarea.selectionStart;

     var front = (txtarea.value).substring(0, strPos);
     var back = (txtarea.value).substring(strPos, txtarea.value.length);
     txtarea.value = front + text + back;
     strPos = strPos + text.length;
     if (br == "ie") {
         txtarea.focus();
         var range = document.selection.createRange();
         range.moveStart('character', -txtarea.value.length);
         range.moveStart('character', strPos);
         range.moveEnd('character', 0);
         range.select();
     }
     else if (br == "ff") {
         txtarea.selectionStart = strPos;
         txtarea.selectionEnd = strPos;
         txtarea.focus();
     }
     txtarea.scrollTop = scrollPos;

 } 

Thanks.

4

1 回答 1

0

答案在这里http://jsfiddle.net/VzbYJ/32/

只需更改对 htmleditorextender 的引用,如下所示:

$(".btn").click(function () {
        var el = $find("<%= HtmlEditorExtender3.ClientID %>")._editableDiv;
        pasteHtmlAtCaret("Some <b>random</b> text", el);
    });
于 2013-10-02T10:15:25.970 回答