我们的表单有相当多的文本区域(在某些情况下,多达 20 个)。每个文本区域都通过 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% 的情况下,文本区域在表单 POST 之前没有使用所见即所得的内容进行更新。我们甚至尝试在提交表单之前通过循环遍历每个 mce 编辑器并调用 save() 方法来强制保存:
$('textarea.editor').each(function () {
$(this).tinymce().save();
});
用Fiddler再次检查POST,我发现textarea仍然没有更新为适当的值。
有谁知道可能导致此问题的原因吗?
UPDATE
为了让事情变得更……有趣……我添加了以下回调,并且得到了奇怪的结果。当表单发布工作时,每次我按下一个键时, 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());
});
}
UPDATE 2
越来越近?我发现清除缓存似乎可以暂时“解决”问题。后续访问将显示损坏的行为。