带有ajax选项卡的TinyMCE

我正在使用JQuery UI 1.8的标签组件,我正在通过ajax(html内容)加载标签的内容。 在其中一个选项卡中,我使用的是tinyMCE组件,当我第一次加载此选项卡时,微小的初始化正确,但如果我navegate到其他选项卡,我再次回想起该选项卡,那么微小的分解。

当tiny_mce.js的导入超出选项卡的内容时,会发生这种情况。 当我将导入移动到tab调用时,tiny没有加载,因为它似乎没有初始化。

问题是:如何在ajax标签中初始化tiny?

提前致谢。

当我遇到与TinyMCE类似的问题并在ajax加载的选项卡之间切换时,我在Ready4State找到了这段精彩的代码,所以我想我会分享,因为我希望它可以帮助其他人。

这将删除页面上的所有TinyMCE实例。

 var i, t = tinyMCE.editors; for (i in t){ if (t.hasOwnProperty(i)){ t[i].remove(); } } 

然后,您可以安全地重新初始化TinyMCE。

我个人在使用switch语句处理每个ui.index之前执行上面的代码,并且我有一个执行TinyMCE初始化的函数。 所以我只是在每个相关的case语句中调用该函数。

希望这有助于其他人。

每次使用编辑器切换回选项卡时,可能需要重新初始化小MCE。您可以在选项卡对象上使用“select”事件。

 $( ".selector" ).tabs({ select: function(event, ui) { // initialise Tiny MCE here } }); 

在重新初始化之前,您可能必须销毁编辑器的任何先前实例/引用。

您需要在切换到另一个选项卡之前关闭您的tinymce实例,否则将阻止具有该ID的编辑器元素。

使用切换选项卡之前,请删除控件

 // the_editor_id equals the id of the underliing textarea tinyMCE.execCommand('mceRemoveControl', false, the_editor_id); 

我找到了解决问题的方法。 tinymce的初始化必须在jquery选项卡的 load事件中,如下所示:

 $("div#tabs").tabs ({collapsible: false ,selected: -1 ,fx: {opacity: 'toggle'} ,load: function (event, ui) { // Tab with tinyMCE if (ui.index == 0) { tinyMCE.init({mode: "none", theme: "advanced", theme_advanced_toolbar_location: "top", theme_advanced_toolbar_align: "left" }); tinyMCE.execCommand ('mceAddControl', false, 'text_area_id'); } else { tinyMCE.triggerSave(); tinyMCE.execCommand('mceFocus', false, 'text_area_id'); tinyMCE.execCommand('mceRemoveControl', false, 'text_area_id'); } } }); 

我希望这有助于其他人。 此外,如果textarea的内容是通过ajax加载的,则命令:

 tinyMCE.triggerSave(); 

不是必要的。

好吧,今天用同样的问题花了3个小时……用Jquery UI 1.10和TinyMCE 4。

问题是,当取消选择时,ajax面板的内容不会从DOM中删除而只是隐藏。 这意味着textarea在DOM中可能超过1次(导航面板)。 =>小MCE的死亡……

Jquery 1.10中没有任何事件可以捕获“未选中的面板”。 你必须处理前加载事件。

所以我的想法是在加载面板之前清空每个“ajax loaded”面板。 代码 :

 $( "#list_onglet_lecteur" ).tabs({ beforeLoad: function( event, ui ) { $("#list_onglet_lecteur div[role=tabpanel]").each(function(){ if($(this).attr("id") != "list_onglet_lecteur-accueil")$(this).empty(); }); $(ui.panel).html('

Chargement de l\'onglet
'); ui.jqXHR.error(function() { ui.panel.html("Echec du chargement de l'onglet. Merci d'actualiser la page."); }); } })

注意我没有找到方法来区分“ajax加载面板”和“预加载面板”…这是一个耻辱,因为你必须将每个“预加载面板”ID添加到代码中…

无论如何,这解决了微小的MCE问题。 无需init进入load事件,并使用mceRemoveControl / mceAddControl命令。 只需在“ajax loaded tab panel”视图中初始化tinyMCE编辑:

  $(function() { tinyMCE.init({ height : 300, mode : "specific_textareas", editor_selector : "mceEditor", theme : "modern", language : 'fr_FR', plugins: [ "advlist autolink lists link image charmap print preview anchor", "searchreplace visualblocks code fullscreen", "insertdatetime media contextmenu paste moxiemanager" ], toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image" }); });