2010-08-31 22 views
19

Estoy ejecutando CKeditor 3.4 en una página bastante simple. Tengo un problema (a veces) en el que cuando llamo a document.main_form.submit(), no se enviará a lo largo del contenido del área de texto. Después de leerlo, parece que CKeditor no está destruyendo correctamente. Traté de destruirlo manualmente antes de guardar el formulario, pero no pude llamarlo. Lo extraño es que funciona a veces, pero no a otros. Estoy en Chrome, por lo que puede estar jodiendo cosas, pero pasa lo mismo en Firefox.¿Cómo destruir correctamente la instancia de CKEditor?

¿Cómo puedo destruir correctamente el CKeditor para que siempre envíe los datos de texto en POST? ¡Gracias!

Respuesta

30

Tuve este problema. Que dolor.

Para destruir adecuadamente la instancia del editor, trate

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

De la documentación here

He resuelto el problema de contenido que falta por asignar el contenido del editor a un campo oculto antes de la devolución de datos. Estoy usando ASP.Net, pero debería funcionar universalmente.

en el lado del cliente controlador de clic del botón de enviar, llame

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

¿cómo sé lo myInstanceName' ' ¿es? ¿Es esta la identificación del editor? – rmcsharry

5

En mi situación

CKEDITOR.instances.myInstanceName.destroy(); 

no ayuda, porque había CKEditor abrió en jquery dialog con doble click en algún artículo. Cuando cerré el editor y luego los abrí de nuevo, mi código se bloqueó.
Solución estaba usando

CKEDITOR.instances.myInstanceName.destroy(false); 

que actualiza elemento DOM (link to documentation).

+1

También abrimos nuestros CKEditors en un diálogo de jquery. Estábamos usando 'CKEDITOR.instances.myInstanceName.destroy (true);' que también causó la falla de nuestro código debido al error "TypeError: a is null". Sin embargo, cambiar a 'falso' no resolvió nuestro problema. Tuve que ajustar esta línea de código en try/catch – jgerman

11

Una vez usé angularjs ui-router con una instancia de CKEDITOR para cada subvista. He utilizado la siguiente solución para borrar los casos cada vez que se carga la interfaz de usuario con vista

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

for..in requiere IE10 .. – Brunis

+0

Esta es una solución mejor. En mi caso, cada vez que el usuario visita la ruta donde se carga el editor, el nombre de la instancia cambia ... de editor1 a editor2, etc. Como no puedo predecir fácilmente el nombre de la instancia, funciona todo de la misma manera. ¡Gracias! – 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

uso este sencillo code.Note mi área de texto id es editor1.
o también puede comprobarlo con console.log(CKEDITOR.instances.editor1);

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

la solución que finalmente se hizo el trabajo.

El problema era si destruyes un ckeditor y posteriormente intentas reemplazar un área de texto que no funciona.

Encontré este simple ejemplo que me dio la pista.Utilice div y anexar el CKEditor en lugar de utilizar reemplazar API llamada

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() }

utiliza para codificar para destruir todas las instancias creadas por CKEditor

Cuestiones relacionadas