Плагин TinyMCE JQuery не всегда обновляет текстовые поля - PullRequest
4 голосов
/ 03 октября 2011

У нас есть форма, которая имеет довольно много текстовых областей (в некоторых случаях целых 20).Каждая из этих текстовых областей преобразуется в редакторы wysiwyg через плагин TinyMCE jquery следующим образом:

var tinymceoptions = {
    script_url: '/Scripts/tiny_mce/tiny_mce.js',
    theme: "advanced",
    mode: "textareas",
    elements: "text,html1",
    theme_advanced_buttons1: "bold,italic,underline,formatselect,separator,image,insertfile,separator,blockquote,bullist,numlist,separator,undo,redo,separator,link,unlink,separator,code,insertimage",
    theme_advanced_buttons2: "",
    theme_advanced_buttons3: "",
    theme_advanced_toolbar_location: "top",
    theme_advanced_toolbar_align: "left",
    theme_advanced_blockformats: "h1,h2,h3,p",
    width: '100%',
    content_css: Settings["tiny_mce_css"],
    plugins: "advimage,advlink,autoresize,inlinepopups,imagemanager,paste",
    relative_urls: false,
    forced_root_block: false
};

$('textarea.editor').tinymce(tinymceoptions);

Проблема, с которой мы сталкиваемся, заключается в том, что в 95% случаев текстовые области не обновляются с помощью wysiwygсодержимое до формы POST.Мы даже пытались форсировать сохранение, просматривая каждый из редакторов mce и вызывая метод save () следующим образом, перед отправкой формы:

    $('textarea.editor').each(function () {
        $(this).tinymce().save();
    });

Я снова обнаружил проверку POST с помощью Fiddler.что текстовая область все еще не обновляется с соответствующим значением.

Кто-нибудь знает, что может быть причиной этого?

ОБНОВЛЕНИЕ

Чтобы сделать вещи более ... интересными ... Я добавил следующие обратные вызовы и получаю странные результаты.Когда форма сообщения РАБОТАЕТ, значение getContent () меняется каждый раз, когда я нажимаю клавишу.Когда сообщение формы НЕ РАБОТАЕТ, getContent постоянно возвращает начальное значение, независимо от того, сколько контента я ввожу:

setup: function (ed) {
    ed.onSaveContent.add(function (ed) {
        console.debug('save content: ' + $(this).tinymce().getContent());
    });
    ed.onKeyPress.add(function (ed, e) {
        console.debug('Editor contents was modified. Contents: ' + $(this).tinymce().getContent());
    });
}

ОБНОВЛЕНИЕ 2

Становится ближе?Я обнаружил, что очистка кеша, похоже, временно «решает» проблему.Последующие посещения покажут нарушенное поведение.

1 Ответ

7 голосов
/ 03 октября 2011

Я определил, что причиной неправильного использования head.js.Мы загружали некоторые элементы через ajax в head.ready () и применяли tinyMCE во время $ .ready ().Изменение $ .ready () на head.ready () решило проблему.

...