2012-03-12 16 views
5

Sto provando a rilevare se qualcosa è cambiato in un CKEditor usando jquery, ma non riesco a farlo funzionare.Se il contenuto in CKEditor viene modificato

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?"; 
      } 
    }; 

Qualcuno sa cosa è necessario per farlo funzionare per CKEditor 3.6.2? Funziona su tutti gli altri elementi del modulo.

risposta

3

È possibile tenere traccia delle modifiche all'interno dell'editor legandosi all'evento chiave dell'editor.

Usando l'adattatore jQuery:

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

Docs sul key evento

+7

Nota: alcune modifiche al contenuto potrebbero non essere attivate con un evento chiave, ad esempio la creazione di qualcosa in grassetto è solo un clic del mouse, non un singolo tocco della tastiera. Parola. – Nenotlep

0

Controllo con la mia installazione Drupal locale, CKEditor non è un elemento di modulo HTML normale (non è un'area di testo). Piuttosto, è un IFrame che imita un elemento del modulo. Penso che probabilmente dovrai creare un piccolo shim di plugin CKEditor e usarlo per comunicare con i tuoi script locali, vedi: add code for event listener for keypress in ckeditor.

1

È possibile utilizzare questo CKEditor plugin che attiva un evento ogni volta che cambia il contenuto.

+0

per CKeditor 4.X? E sull'aggiornamento di @Nenotlep, "CKEditor 4.2 è uscito e ha introdotto l'evento onChange come una funzionalità", è lo stesso o il plugin è migliore? –

+1

È un'implementazione diversa. Invece di scegliere il plugin esistente e di migliorarlo, hanno deciso di scrivere una versione di base usando l'Undo, quindi mancano tutte le funzionalità che ho descritto quando ho spiegato perché il sistema di Annulla in CKEditor non è sufficiente per un evento di modifica. – AlfonsoML

+0

La pagina collegata alla pagina dice che non funziona e non verrà aggiornata per ckEditor 4. –

28

Per questo c'è a function called checkDirty() in the CKE api. In questo modo non è necessario eseguire il rollover. Inoltre viene fornito con altre utili funzioni, come resetDirty(). Prova questo come un test:

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

aggiornamento 5.7.2013

Vedi http://dev.ckeditor.com/ticket/9794 - evento change è una caratteristica confermata nuova! È stato anche contrassegnato per Milestone 4.2 e confermato dal tweet di CKSource! Semplicemente non ti fidare della scadenza per le pietre miliari, tendono a cambiare.

aggiornamento 1.8.2013

CKEditor 4.2 è fuori e ha introdotto l'evento onChange come una caratteristica. Apparentemente non è affidabile al 100% per ogni possibile cambiamento secondo i documenti - si spera che sia abbastanza buono da usare! Informazioni sulla release http://ckeditor.com/release/CKEditor-4.2

Problemi correlati