Плагин TinyMCE jQuery не всегда обновляет текстовые области

#jquery #jquery-plugins #tinymce

#jquery #jquery-плагины #tinymce

Вопрос:

У нас есть форма, в которой довольно много текстовых областей (в некоторых случаях до 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 до публикации формы. Мы даже пытались принудительно сохранить, просматривая каждый из редакторов mce и вызывая метод save() следующим образом, перед отправкой формы:

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

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

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

Обновить

Чтобы сделать дело более … интересным… Я добавил следующие обратные вызовы и получаю странные результаты. Когда форма post РАБОТАЕТ, значение 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:

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

Комментарии:

1. Спасибо. Это сработало и для меня (после нескольких часов погони за призраками!)

2. @AamirAdnan не волнуйся, я тебе помогу 🙂