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!
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();
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()
}
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).
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();
}
for(name in CKEDITOR.instances){
CKEDITOR.instances[name].destroy()
}
utiliser pour coder pour détruire toutes les instances créées par ckeditor
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');
}
}
$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);}}'
)));