Plusieurs instances de CKEditor (dans Safari)

J'ai un problème pour créer plusieurs instances d'un CKEditor dans une boîte de dialogue JQuery UI. La boîte de dialogue charge un formulaire distant via AJAX, de sorte que l'objectif est de pouvoir fermer et rouvrir la boîte de dialogue et avoir une nouvelle instance de l'éditeur. Avec les options par défaut, lors de la réouverture de la boîte de dialogue, elle donne une erreur indiquant qu'un éditeur avec ce nom existe déjà. J'ai donc essayé plusieurs méthodes pour détruire l'instance de l'éditeur et elles ont tous pour résultat le même problème. Lorsque l'éditeur est rechargé, la zone de texte indique null et les boutons ne fonctionnent pas.

Actuellement, j'utilise cette méthode pour détruire l'instance:

var instance = CKEDITOR.instances['test']; if (instance) { CKEDITOR.remove(CKEDITOR.instances['test']); } 

J'ai recréé le problème avec quelques fichiers html simples disponibles pour téléchargement ici .

EDIT: J'ai juste essayé d'utiliser deux fichiers distants avec une zone de texte qui a un nom différent et j'ai le même problème. Lorsqu'une boîte de dialogue est ouverte, puis fermée, l'autre boîte de dialogue comporte un CKEditor "nul" lorsqu'il est ouvert.

Aussi, apparemment, ce n'est qu'un problème dans Safari.

C'est ce que j'ai fait:

 var CKeditors = {}; function loadEditors() { var $editors = $("textarea.ckeditor"); if ($editors.length) { $editors.each(function() { var editorID = $(this).attr("id"); if(CKeditors[editorID]){ CKeditors[editorID].destroy(); CKeditors[editorID] = null; } var dst = editorID+'-element'; var html = ''; if( $(this).val() ){ html = $(this).val(); } CKeditors[editorID] = CKEDITOR.appendTo(dst, {}, html); }); $("textarea.ckeditor").hide(); } } function updateCKEditors() { for(x in CKeditors){ $("#"+x).val(CKeditors[x].getData()); } } 

Puis après le succès d'Ajax

 loadEditors() 

Et avant la soumission de formulaire (par exemple en utilisant ajax):

 updateCKEditors() 

Vous avez besoin de jQuery pour que cela fonctionne. Ceci est pour zend_forms, mais après quelques corrections devraient également fonctionner dans des formes normales. Jouer avec 'dst' pour faire cela.

Un peu d'un sujet ancien, mais j'ai eu un problème similaire.

J'ai utilisé la solution activée ci-dessus, qui a bien fonctionné! CKEDITOR.appendTo fonctionné pour moi, mais avec la prochaine modification légère à la fonction loadEditors , il a fait:

 function loadEditors() { var $editors = $("textarea.ckeditor"); if ($editors.length) { $editors.each(function() { var editorID = $(this).attr("id"); if(CKeditors[editorID]){ CKeditors[editorID].destroy(); CKeditors[editorID] = null; } var dst = editorID+'-element'; CKeditors[editorID] = CKEDITOR.replace(dst, {}); }); } } 

ce que je fais:

 var instance = CKEDITOR.instances['test']; instance.destroy(); instance = null;