更改 CKEDITOR 值会删除事件侦听器

Changing CKEDITOR value removes event listener

我有一个包含多个 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 click' 日志。

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

已激活,我收到了 'initial or change' 日志,但不再捕获该字段中的点击。

这已经是在其他地方更改为解决方案的版本(对我不起作用),因为最初 this.editable().attachListener(this.document,'click', function(){ 只是 this.document.on('click', function(){

CKEDITOR v4.6.2

JQuery v3.1.1

我以一种笨拙的方式解决了它。首先,我替换了

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

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

因此监听器的原始附加仅在加载页面时发生。

我删除了

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

完全替换为我的 'hacky' 解决方案:我删除了编辑器和 textarea 周围包装器内的所有内容,用 'original' 代码重新填充它,重新激活它上面的 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
    });
});