如何在销毁CKEditor时删除事件侦听器

时间:2014-01-03 09:07:37

标签: javascript ckeditor

我有一个像这样的ckeditor插件:

CKEDITOR.plugins.add('testplugin', {
        init: function (editor) {
               editor.on('contentDom', function (e) {                
                    var body = editor.document.getBody();           
                    body.on('mouseup', function (e) {
                       alert('run!!!!');
                     });
                  });
        });
});

它在CKEDITOR版本3(iframe基础)中完美运作

但是当我升级到CKEDITOR第4版(最新的 - 可信赖的基础)时,

当我销毁然后重新启动ckeditor时,所有事件都会多次触发。

(使用CKEDITOR.instants.testEditor.destroy()CKEDITOR.replace('testEditor',options);

我使用:removeAllListeners( )删除所有对正文的事件侦听器,但没有更改。

我如何完成销毁CKEDITOR 4 +所有事件监听器?

1 个答案:

答案 0 :(得分:4)

您似乎使用内联实例,因此editor.documentCKEDITOR.document。这意味着每个实例共享相同的var body = editor.document.getBody();

为了避免重复事件作为“死亡编辑”附加的剩余事件,您应该聆听editor#destroy并在每一个上致电event#removeListener,或使用editable#attachListener自动执行此操作为你工作(jsFiddle):

editor.on( 'contentDom', function() {                                
    var body = editor.document.getBody();

    // This listener will be deactivated once editor dies.
    editor.editable().attachListener( body, 'mouseup', function() {
        console.log( 'run!!!!' );
    } );
} );