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

时间:2017-11-09 12:38:40

标签: jquery ckeditor

我有一个包含几个CKEDITOR字段的页面,我在其中捕获了一个click事件。 单击某个按钮时,该字段将被清除,但遗憾的是,该字段也会删除事件监听器。

这似乎是一个已知问题。 我尝试了其他地方提供的解决方案,但我仍然卡住了。

代码:

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('');

已激活,我会收到“初始或更改”日志,但不会再点击该字段了。

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

CKEDITOR v4.6.2

JQuery v3.1.1

1 个答案:

答案 0 :(得分:0)

我以一种黑客的方式解决了这个问题。首先,我更换了

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

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

所以只有在加载页面时才会发生侦听器的原始附加。

我删除了

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

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