Comment détruire correctement L'instance CKEditor?

J'exécute CKeditor 3.4 sur une page assez simple. J'ai un problème (parfois) où lorsque j'appelle le document.main_form.submit (), il n'enverra pas le contenu du textarea. Après quelques lectures, il semble que CKeditor ne détruit pas correctement. J'ai essayé de le détruire manuellement avant de sauvegarder le formulaire, mais je n'ai pas pu l'appeler. La chose étrange est, cela fonctionne parfois, mais pas d'autres. Je suis sur Chrome, c'est peut-être en train de tout foutre en l'air, mais la même chose se produit en Firefox.

Comment puis-je détruire correctement le CKeditor pour qu'il envoie toujours les données textarea dans le POST. Merci!

22
demandé sur Marek Lewandowski 2010-09-01 01:02:52

7 réponses

j'ai eu ce problème. Quelle douleur.

Pour détruire correctement l'éditeur d'exemple, essayez

if (CKEDITOR.instances.myInstanceName) CKEDITOR.instances.myInstanceName.destroy();

à Partir de la documentation ici

j'ai résolu le contenu manquant problème en affectant le contenu de l'éditeur à un champ caché avant publication. J'utilise ASP.Net mais cela devrait fonctionner universellement.

dans le gestionnaire de clic côté client du bouton Soumettre, appeler

if (CKEDITOR.instances.myInstanceName)
    document.getElementById('hiddenField').value = CKEDITOR.instances.getData();
34
répondu Laramie 2010-08-31 21:19:59

j'ai déjà utilisé angularjs ui-router avec une instance CKEDITOR pour chaque sous-vue. J'ai utilisé la solution suivante pour effacer les instances chaque fois que je charge la vue ui

for(name in CKEDITOR.instances)
{
    CKEDITOR.instances[name].destroy()
}
12
répondu Bernie G 2015-03-05 08:44:33

dans ma situation

CKEDITOR.instances.myInstanceName.destroy();

n'a pas aidé, parce que J'avais ouvert CKEditor dans jquery dialog double-cliquez sur un élément. Quand j'ai fermé editor et que je les ai rouverts, mon code s'est écrasé.

La Solution a été d'utiliser

CKEDITOR.instances.myInstanceName.destroy(false);

quel élément DOM mis à jour (lien vers la documentation).

6
répondu Tomasz Dzięcielewski 2013-03-06 13:12:09

utilisez ce code simple.Remarque ma zone de texte id est rédacteur1.

ou Vous pouvez aussi vérifier avec console.log(CKEDITOR.instances.editor1);

if (CKEDITOR.instances.editor1) {
     CKEDITOR.instances.editor1.destroy();
}
4
répondu sandeep kumar 2016-08-04 05:07:03

for(name in CKEDITOR.instances){ CKEDITOR.instances[name].destroy() }

utiliser pour coder pour détruire toutes les instances créées par ckeditor

4
répondu ashish naghate 2017-10-15 14:57:08

la solution qui a finalement fonctionné.

le problème était si vous détruisez un ckeditor et ensuite essayer de remplacer un textarea qui ne fonctionne pas.

j'ai trouvé cet exemple simple qui m'a donné l'indice. Utilisez div et ajoutez le ckeditor au lieu d'utiliser replace api call

http://ckeditor.com/latest/samples/old/ajax.html

<div id='emailEditor1'>
              </div>

function closeTab() {
    emailEditor1.destroy();
    emailEditor1 = null;
}

function createEditor() 
    if (emailEditor1 == null) {
        emailEditor1 = CKEDITOR.appendTo( 'emailEditor1');
    }
}
-1
répondu Will Berger 2016-09-21 07:47:43
$this->widget('cms.extensions.fancybox.EFancyBox', array(
    'target' => 'a#fancy-link',
    'config' => array( 'onClosed'=>'js:function(){for(name in CKEDITOR.instances){ CKEDITOR.instances[name].destroy(true);}}'
)));
-2
répondu shobhit pokhriyal 2016-01-05 09:10:23