2017-11-09 11 views
0

私はクリックイベントを捕捉するいくつかのCKEDITORフィールドを持つページを持っています。 特定のボタンをクリックすると、フィールドはクリアされますが、残念ながらイベントリスナーも削除されます。CKEDITOR値を変更するとイベントリスナーが削除されます

これは既知の問題であるようです。 私は他の場所で提供されているソリューションを試しましたが、まだ固まっています。

コード:初期、そのままフィールドに

var aInst = CKEDITOR.instances; 
for (var key in aInst){ 
    CKEDITOR.instances[key].on('contentDom', function() { 
     console.log('initial or change'); 
     this.editable().attachListener(this.document,'click', function(){ 
      console.log('iframe click'); 
     }); 
    }); 
} 

クリックは私に 'のiframeクリック' ログを取得します。

CKEDITOR.instances[cpdId+'_flip_text_input'].setData(''); 

が活性化されたとき、私はログ「初期または変更」を取得するが、フィールドでのクリックはもはやキャッチされていません。

私はそれを解決し、もともとthis.editable().attachListener(this.document,'click', function(){は単にthis.document.on('click', function(){

CKEditorバージョンのv4.6.2

はJQuery v3.1.1

答えて

0

だったので、これは、すでに他の場所で(私のために働いていない)を溶液に変更したバージョンですハッキーなやり方でまず第一に、私は、ページのロードに

CKEDITOR.instances[key].on('instanceReady', function() { 

ので、リスナーの元取り付けが起こると

CKEDITOR.instances[key].on('contentDom', function() { 

を置き換えます。

私は完全に

CKEDITOR.instances[cpdId+'_flip_text_input'].setData(''); 

を削除し、私の「ハック」ソリューションに置き換え:私は、上の再活性化CKEditorバージョン、エディタやテキストエリアのラッパー内のすべてのものを削除「オリジナル」のコードでそれを詰め替えそれは、リスナーを添付し、魅力のように動作します:

(var reFill = original html with textarea) 

$('#'+cpdId+'_flip_text').empty(); 
$('#'+cpdId+'_flip_text').html(reFill); 
$('#'+cpdId+'_flip_text').find('textarea').ckeditor(function(){ 
    var CKedit = CKEDITOR.instances[cpdId+'_flip_text_input']; 
    CKedit.editable().attachListener(CKedit.document,'click', function(){ 
     //stuff to do on click 
    }); 
}); 
関連する問題