2010-08-31 11 views
19

Ich benutze CKeditor 3.4 auf einer ziemlich einfachen Seite. Ich habe ein Problem (manchmal), wo, wenn ich document.main_form.submit() aufrufen, wird es nicht entlang des Inhalts der Textarea senden. Nach einigem Lesen klingt es wie CKeditor nicht richtig zerstört. Ich habe versucht, es manuell zu zerstören, bevor ich das Formular speichere, konnte es aber nicht aufrufen. Das Seltsame ist, es funktioniert manchmal, aber nicht andere. Ich bin in Chrome, so dass es mit Dingen schraubt, aber das gleiche passiert in Firefox.Wie wird die CKEditor-Instanz ordnungsgemäß zerstört?

Wie kann ich den CKeditor richtig zerstören, so dass es immer die Textarea Daten in POST sendet. Vielen Dank!

Antwort

30

Ich hatte dieses Problem. Was für ein Schmerz.

Um richtig den Editor Instanz zu zerstören, versuchen

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

Aus der Dokumentation here

ich den fehlenden Inhalt Problem gelöst, indem der Inhalt des Editors zu einem versteckten Feld Zuordnung vor Postback. Ich benutze ASP.Net, aber es sollte universell funktionieren.

in dem clientseitigen Click-Handler des Submit-Button, rufen

if (CKEDITOR.instances.myInstanceName) 
    document.getElementById('hiddenField').value = CKEDITOR.instances.getData(); 
+1

wie kann ich wissen, was myInstanceName ersetzen ist es? Ist das die ID des Herausgebers? – rmcsharry

5

In meiner Situation

CKEDITOR.instances.myInstanceName.destroy(); 

nicht helfen, weil ich CKEditor in jquery dialog auf Doppelklick geöffnet hatte auf einem Gegenstand. Als ich den Editor geschlossen und dann wieder geöffnet habe, ist mein Code abgestürzt.
Lösung wurde mit

CKEDITOR.instances.myInstanceName.destroy(false); 

die DOM-Element aktualisiert (link to documentation).

+1

Wir öffnen unsere CKEditors auch in einem jquery Dialog. Wir verwendeten 'CKEDITOR.instances.myInstanceName.destroy (true);' was auch dazu führte, dass unser Code aufgrund des Fehlers "TypeError: a is null" abstürzte. Der Wechsel zu 'false' hat unser Problem jedoch nicht gelöst. Hatte diese Codezeile in einem try/catch – jgerman

11

Ich habe einmal angularjs UI-Router mit einer CKEDITOR-Instanz für jede Unteransicht verwendet. Früher habe ich die folgende Lösung die Instanzen ich die ui-Ansicht laden jedes Mal löschen

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

for..in erfordert IE10 .. – Brunis

+0

Dies ist eine bessere Lösung. In meinem Fall ändert sich der Instanzname jedes Mal, wenn der Benutzer die Route aufruft, auf der der Editor geladen ist, von Editor1 zu Editor2 usw. Da ich den Instanznamen nicht einfach vorhersagen kann, kann ich sie alle so durchlaufen, dass dies funktioniert. Vielen Dank! – rmcsharry

-2
$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);}}' 
))); 
3

Verwendung dieses einfache code.Note meine Textbereich id editor1 ist.
oder Sie können auch prüfen, mit console.log(CKEDITOR.instances.editor1);

if (CKEDITOR.instances.editor1) { 
    CKEDITOR.instances.editor1.destroy(); 
} 
-1

die Lösung, die schließlich Arbeit tat.

Das Problem war, wenn Sie einen Ckeditor zerstören und anschließend versuchen, eine Textarea zu ersetzen, die nicht funktioniert.

Ich fand dieses einfache Beispiel, das mir den Schlüssel gab.Verwenden div und fügen Sie den ckeditor anstelle von api Anruf

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

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

Gebrauch zu codieren alle von ckeditor erstellt Instanzen zu zerstören

Verwandte Themen