Saltar al contenido

Problema de serialize () de CKEditor y jQuery

Solución:

Como se mencionó en los comentarios de su publicación original, supongo que está usando CKEditor y en su función jQuery ready (o en algún lugar después de que se cargue el documento) reemplaza un área de texto con una instancia de editor. A CKEditor, como a la mayoría de los editores WYSIWYG le gusta reformatear el texto que le pasa, haciéndolo marcado válido, reemplazando caracteres especiales con entidades HTML, envolviendo su contenido en un párrafo, etc. Esto significa que aunque no ha cambiado nada, el original y el contenido reformateado puede ser diferente.

La inicialización de la instancia del editor se retrasa y probablemente ocurra después de que haya serializado su formulario. Aun así, CKEditor no está fuertemente vinculado con el área de texto (ahora oculta) desde la que se creó, debe llamar a la función updateElement del editor para eliminar todos los cambios. Por lo general, lo hace automáticamente al enviar el formulario, por eso está obteniendo el contenido reformateado en su controlador de envío.

Por lo tanto, solo debe asegurarse de llamar a la función updateElement antes de serializar por primera vez, para lo cual el mejor lugar es después de que se haya cargado el editor. Afortunadamente, hay un evento para eso, asumiendo el siguiente marcado HTML:

<form id="myForm">
   <textarea name="test" id="myEditor">My random text</textarea>
</form>

Función jQuery ready:

$(function(){
   function SerializeForm(){
      // Make sure we have the reformatted version of the initial content in the textarea
      CKEDITOR.instances.myEditor.updateElement();

      // Save the initial serialization
      form_data.edit_initial = $('#myForm').serialize();
   }

   // You might as well leave it here in case CKEditor fails to load
   form_data.edit_initial = $('#myForm').serialize();

   // Create editor instance    
   CKEDITOR.replace('myEditor');

   // Tap into CKEditor's ready event to serialize the initial form state
   CKEDITOR.instances.myEditor.on("instanceReady", SerializeForm);
});

¡Gracias! He tenido problemas desde hace mucho tiempo con CKEditor textarea. No podría cambiar el valor sin un envío en cakephp.

Pero ahora todo funciona. Tuve que llamar updateElement antes de serialize como esto:

CKEDITOR.instances.SurveyBody.updateElement();
var formData = $("#surveyForm").serialize();
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *