【问题标题】:Changing CKEDITOR value removes event listener更改 CKEDITOR 值会删除事件侦听器
【发布时间】:2017-11-14 17:27:28
【问题描述】:

我有一个包含多个 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

【问题讨论】:

    标签: jquery ckeditor


    【解决方案1】:

    我以一种老套的方式解决了它。首先,我换了

    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
        });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-04
      • 2022-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      相关资源
      最近更新 更多