多个 AJAX 刷新和 TinyMCE 出现问题

7

所以我遇到了这个困境。

但我正在努力解决它。
<SCRIPT src="../js/tiny_mce/tiny_mce.js"></script>
<SCRIPT type="text/javascript">
   tinyMCE.init({
        mode : "textareas",
        theme : "simple"
   });
</SCRIPT>
<SCRIPT src="../js/admin.js"></script>

上面的代码是在我的PHP页面上调用的。
然后我调用了:
var request = $.ajax(
{
   url:"getEvents.php",
   type:"POST",
   data:{'method':'showevents'},
   dataType:"html"
   }).done(function(msg){
        $('#eventlistbody').html(msg);
   }); 

   setTimeout(
        function(){
            $(".mceSimple").each(function(){
              tinyMCE.execCommand("mceAddControl",false, this.id);
           })
   },2000); 

这会加载一堆文本区域......第一次返回时,tinyMCE将在所有文本区域上加载......当我单击重新加载时,它再次运行并返回文本区域时,它们不再与tinyMCE相关联。 我不确定为什么第一次可以工作而后续的却不行。

3个回答

13

在重新加载之前,您应正确关闭tinymce以便能够重新初始化一个tinymce编辑器。这是必要的,因为tinymce不喜欢在dom中被拖动,并且已初始化的编辑器实例可能具有唯一的id(使用reload将强制tinymce尝试使用相同的id初始化第二个编辑器 - 这将失败)。

Tinymce3:要关闭编辑器实例,请使用:

tinymce.execCommand('mceRemoveControl',true, editor_id);
重新初始化使用。
tinymce.execCommand('mceAddControl',true, editor_id);

Tinymce4: 关闭编辑器实例的方法如下:

tinymce.execCommand('mceRemoveEditor',true,editor_id);
重新初始化,请使用
tinymce.execCommand('mceAddEditor',true,editor_id);

1
感谢提供这些信息,我昨天凌晨大约3点发现了它,但是没有时间回复。非常有用的信息。 - BostonMacOSX
1
@dpDesignz:这个解决方案仅适用于tinymce3,如果要使其适用于tinymce4,则需要将mceRemoveControl替换为mceRemoveEditor,将mceAddControl替换为mceAddEditor。请参见我的更新答案。 - Thariama
@Thariama 太棒了,谢谢!:D 不幸的是它没有做我希望它做的事情:( 请看我的问题:https://dev59.com/VIjca4cB1Zd3GeqPtTmy - dpDesignz

2

对于我来说,tinyMCE.remove(editor_id) 起作用了。


1
Tinymce4:关闭编辑器实例请使用以下方法:

tinymce.remove(); 

或者指示一个唯一的ID
tinymce.execCommand('mceRemoveEditor',true,editor_id);

重新初始化,请使用。
tinymce.init(conftinymce);

或者指定一个唯一的ID
tinymce.execCommand('mceAddEditor',true,editor_id);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接