2012-03-12 27 views
5

Estoy tratando de detectar si algo se cambia en un CKEditor usando jquery, pero no puedo hacer que funcione.Si se cambia el contenido en CKEditor

var isModified = false; 

$('textarea,input').change(function(){ 
     if(!isModified){ 
      isModified = true; 
     } 
}); 

$(".ckeditor").document.on('keydown', function() { isModified = true; }); 

window.onbeforeunload = function(){ 
     $(".ckeditor").ckeditorGet().updateElement(); 

     if(isModified){ 
       return "Are you sure you want to leave page?"; 
      } 
    }; 

¿Alguien sabe qué se necesita para que funcione con CKEditor 3.6.2? Funciona en todos los demás elementos de formulario.

Respuesta

3

Puede rastrear los cambios dentro del editor vinculando al evento clave del editor.

El uso del adaptador de jQuery:

$('.ckeditor').ckeditorGet().on('key', function(e) { 
    var keyCode = e.data.keyCode; // if you need to track the key 
    isModified = true; 
}); 

Docs en el caso key

+7

Nota: algunos cambios en el contenido pueden no activarse con un evento clave, por ejemplo, hacer algo en negrita es solo un clic del mouse, no un solo toque del teclado. Palabra. – Nenotlep

0

Comprobando con mi instalación local de Drupal, CKEditor no es un elemento de formulario HTML normal (no es un área de texto). Más bien, es un IFrame que imita un elemento de forma. Creo que probablemente necesite crear un pequeño complemento de CKEditor y usarlo para comunicarse con sus scripts locales, consulte: add code for event listener for keypress in ckeditor.

1

Puede utilizar este CKEditor plugin que activa un suceso siempre los cambios de contenido.

+0

para CKeditor 4.X? Y sobre la actualización @Nenotlep, "CKEditor 4.2 está fuera e introdujo el evento onChange como una característica", ¿es el mismo o el plugin es mejor? –

+1

Es una implementación diferente. En lugar de elegir el plugin existente y mejorarlo, decidieron escribir una versión muy básica utilizando el Deshacer, por lo que les faltan todas las características que describí cuando les expliqué por qué el sistema Deshacer en CKEditor no es suficiente para un evento de cambio. – AlfonsoML

+0

La página vinculada a dice que no funciona y no se actualizará para ckEditor 4. –

28

Hay a function called checkDirty() in the CKE api para esto. De esa forma no es necesario que mueva el suyo. También viene con otras funciones útiles, como resetDirty(). Tratar esto como una prueba:

if (CKEDITOR.instances.editor1.checkDirty()) alert("Content changed"); 

actualización 5.7.2013

Ver http://dev.ckeditor.com/ticket/9794 - evento de cambio es una nueva característica confirmada! ¡También se ha marcado para Milestone 4.2 y confirmado por un tweet de CKSource! Simplemente no confíes en la fecha de vencimiento para los hitos, ellos tienden a cambiar.

actualización 1.8.2013

CKEditor 4.2 está fuera y se presentó el evento onChange como una característica. Aparentemente no es 100% confiable para cada cambio posible de acuerdo con los documentos, ¡con suerte es lo suficientemente bueno para usar! Información de liberación en http://ckeditor.com/release/CKEditor-4.2

Cuestiones relacionadas