2012-03-12 14 views
5

jqueryを使用してCKEditorで何かが変更されたかどうかを検出しようとしていますが、動作させることはできません。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?"; 
      } 
    }; 

CKEditor 3.6.2で動作させるために必要なことを知っている人はいますか?それは他のすべてのフォーム要素で機能します。

答えて

3

エディターのキーイベントにバインドすることで、エディター内の変更を追跡できます。 jQueryのアダプタを使用して

keyイベント

+7

注:コンテンツの一部の変更は、キーイベントでは発生しない可能性があります。例えば、大胆なものを1つのキーボードタップではなく、マウスでクリックするだけです。ワード。 CKeditor 4.Xの – Nenotlep

0

私のローカルのDrupalインストールで確認すると、CKEditorは通常のHTMLフォーム要素ではありません(テキストエリアではありません)。むしろ、それはフォーム要素を模倣するIFrameです。おそらく、あなたは小さなCKEditorプラグインシムを作成し、それをあなたのローカルスクリプトと通信するために使用する必要があると思うでしょう:add code for event listener for keypress in ckeditor

1

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

ドキュメントあなたはいつでもコンテンツの変更イベントが発生し、このCKEditor pluginを使用することができます。

+0

?そして、@Nenotlepのアップデートについては、「CKEditor 4.2がリリースされ、機能としてonChangeイベントが導入されました」と同じプラグインが優れていますか? –

+1

これは別の実装です。既存のプラグインを選択して改良する代わりに、元に戻す機能を使って非常に基本的なバージョンを作成することにしました。なぜなら、CKEditorの元に戻すシステムが変更イベントでは不十分な理由を説明したときに、 – AlfonsoML

+0

ページにリンクされていると動作しないと表示され、ckEditor 4用に更新されません。 –

28

これにはa function called checkDirty() in the CKE apiがあります。そうすれば、あなたは自分自身を転がす必要はありません。 resetDirty()のような他の便利な関数もあります。テストとしてこれを試してみてください:

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

アップデート2013年7月5日

http://dev.ckeditor.com/ticket/9794を参照してください - 変更イベントが確認された新機能です!これはMilestone 4.2でもマークされており、CKSourceからのツイートによって確認済みです!マイルストーンの締め切り日を信用せず、変更する傾向があります。

アップデート2013年1月8日

CKEditorバージョン4.2が出て、それが機能としてonChangeイベントを導入しました。どうやら、ドキュメントに応じてすべての可能な変更に対して100%信頼できるわけではありません - うまくいけば、使用するだけで十分です!リリース情報:http://ckeditor.com/release/CKEditor-4.2

関連する問題