2017-11-09 1 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 
    }); 
}); 
관련 문제