ckeditor 4 ломается после асинхронной обратной передачи только в IE

0

Я решил проблему. Я переместил CKEditor за пределы UpdatePanel. Кнопка, находящаяся внутри UpdatePanel, позволяла мне запускать обратную передачу async, которая все же позволяла мне обращаться к данным в RepeaterItem, которые мне нужно было сохранить в базе данных.

С CKEditor за пределами UpdatePanel он больше не блокируется после async-обратной передачи. Я до сих пор не знаю, что именно заставляет CKEditor ломаться после обратной передачи, но, по крайней мере, я узнал, как это предотвратить. Надеюсь, этот ответ может помочь кому-то еще некоторое время.


У меня есть ретранслятор ASP.NET, который размещает несколько UpdatePanels на моей странице с текстовыми полями CKEditor, чтобы пользователи могли отвечать на вопросы. Я предоставил кнопку "Сохранить ответ", которая позволяет асинхронному обратному сообщению сохранить текущий ответ.

В Internet Explorer после асинхронной обратной передачи (которая правильно сохраняет ответ) страница блокируется и не позволяет пользователям снова выбирать текстовое поле или любой текст на странице. Пользователь может по-прежнему нажать кнопку "Продолжить" и любые ссылки, чтобы перейти от страницы, и нажатие на один из значков CKEditor (например, выделенная жирным шрифтом или уменьшение размера шрифта) восстанавливает возможность щелчка в текстовых окнах и выбора текст на странице снова.

Каждый другой крупный браузер работает отлично. Это происходит в IE 8+ (без поддержки до 8 или, скорее всего, там тоже произойдет).

Вот соответствующий код:

Javascript

    function pageLoad() {
        $(".editor").each(function () {
            $(this).ckeditor().editor.on("change", function (event) {
                // Updates the asp control on change
                event.editor.updateElement();
            });
        });
    }

Разметка (в повторителе ItemTemplate, повторяющаяся для каждого вопроса в применимых данных)

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        ... Question stuff here...
        <asp:TextBox ID="txtAnswer" runat="server" TextMode="MultiLine" CssClass="editor"></asp:TextBox>
        <div>
        <asp:Button ID="btnSave" runat="server" Text="Save Answer" Enabled="false" OnClick="SaveAnswer" />
        </div>                    
    </ContentTemplate>
</asp:UpdatePanel>

В С# нет исключений, и метод SaveAnswer() выполняется успешно, сохраняя ответ, но этот небольшой сбой кажется для меня довольно странным... Особенно тот факт, что это мешает вам выбирать любой текст на странице, а не только внутри экземпляров CKEditor.

Любые предложения очень ценятся - и спасибо за то, что нашли время, чтобы проверить мой вопрос.

Теги:
ckeditor
internet-explorer

2 ответа

0
Лучший ответ

Я решил проблему. Я переместил CKEditor за пределы UpdatePanel. Кнопка, находящаяся внутри UpdatePanel, позволяла мне запускать обратную передачу async, которая все же позволяла мне обращаться к данным в RepeaterItem, которые мне нужно было сохранить в базе данных.

С CKEditor за пределами UpdatePanel он больше не блокируется после async-обратной передачи. Я до сих пор не знаю, что именно заставляет CKEditor ломаться после обратной передачи, но, по крайней мере, я узнал, как это предотвратить. Надеюсь, этот ответ может помочь кому-то еще некоторое время.

0

просто дайте ckeditor обновить текстовое поле при изменении:

var ckEditor = CKEDITOR.replace(textAreaId);

ckEditor.on("change", function (event) {
    event.editor.updateElement();
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню