1

我的主要问题与将文本插入 Ajax 控件工具包 Html 编辑器的光标位置有关。这几天我一直在绞尽脑汁,终于到了解决这个问题的最后一站。我将设置一些上下文来更好地描述我的确切问题。

我在 ASP.Net 页面中使用 HtmlEditor,并尝试从 DropDownList 插入值。我正在使用客户端 javascript 来触发 selectedindexchanged 事件。例如,假设我在设计面板中有一些文本,如下所示:

123456789
1234[CaretPosition]56789
123456789

现在,我想将变量ddlText准确地插入到插入符号的位置。我的代码现在的方式是将值插入到正确的水平位置,但它似乎忽略了我的选择在第二行的事实。输出将类似于以下内容:

1234[ddltext]56789
123456789
123456789

注意我的插入符号位置在第二行,但插入的文本出现在第一行。有没有办法让插入功能将文本插入到正确的水平和垂直位置

这是我处理插入事件的脚本。

        <script type="text/javascript">

            $(document).ready(function () {
                $('#<%=ddlFields.ClientID%>').change(function () {
                    var ddltext = $('#<%=ddlFields.ClientID%> option:selected').text();
                    insertText(ddltext)
                });
            });

            function insertText(text) {
                var editorField = document.getElementById('MainContent_Editor1_ctl02_ctl00').contentWindow.document.body.innerHTML;
                var range = document.getElementById('MainContent_Editor1_ctl02_ctl00').contentWindow.getSelection().getRangeAt(0);
                var selStart = range.startOffset;
                var selEnd = range.endOffset;
                var innerText = editorField.substring(0, selStart) + text + editorField.substring(selEnd, editorField.length);
                document.getElementById('MainContent_Editor1_ctl02_ctl00').contentWindow.document.body.innerHTML = innerText;                                           
            }
    </script>

我现在一直在反对这个要求,我真的可以用一双新的眼睛来看待它。

4

1 回答 1

0

在网络上随机网站的大量帮助下,我能够按照我的要求正常工作。没有一个网站提供明确的指导,但根据我从几个网站中学到的知识,我能够拼凑出一个在 Firefox、Chrome 和 IE 中处理此问题的函数。当在 ASP.net 页面中使用时,ajax 控制工具包 HTML 编辑器在 Opera 中本身存在很多错误,但这超出了我的控制能力。这是我处理问题要求的javascript。值得注意的是,在 IE 中,您应该将触发事件的函数更改为在 amousedown而不是 a上触发click。希望此功能有助于汇总散布在网络上的有关此主题的所有信息。

    <script type="text/javascript">

        $(document).ready(function () {
            var isMSIE = /*@cc_on!@*/false;
            if (isMSIE == false) {
                $('#<%=btnAddField.ClientID%>').click(function (event) {
                    event.preventDefault();
                    insertText($('#<%=ddlFields.ClientID%> option:selected').val())
                    return false;
                });
            }
            if (isMSIE == true) {
                $('#<%=btnAddField.ClientID%>').mousedown(function (event) {
                    event.preventDefault();
                    insertText($('#<%=ddlFields.ClientID%> option:selected').val())
                    return false;
                });
            }
        });

        function insertText(text) {

            var sel, range;
            if (window.getSelection) {
                sel = document.getElementById('YourIFramesClientIDGoesHere').contentWindow.getSelection();
                var isMSIE = /*@cc_on!@*/false;

                if (sel.rangeCount && isMSIE == false) {

                    range = sel.getRangeAt(0);
                    range.deleteContents();
                    textNode = document.createTextNode(text);
                    range.insertNode(textNode);

                    range.setStart(textNode, textNode.length);
                    range.setEnd(textNode, textNode.length);
                    sel.removeAllRanges();
                    sel.addRange(range);
                }
            }
            if (sel.rangeCount && isMSIE == true) {

                range = document.selection.createRange();
                range.pasteHTML(text);

            }

        }
    </script>
于 2012-08-31T15:02:21.030 回答