2012-04-30 3 views
4

связать что-то событие OnChange, можно было бы написать что-то похожее на это:Как отменить событие от CKEditor?

CKEDITOR.on('currentInstance', function(ev) 
{ 
     if (CKEDITOR.instances[element_id].checkDirty()) { 
      unsaved_changes = true; 
     } 
}); 

Но ... как же отвязать, что эту функцию?

Вышеприведенный код является частью некоторого кода-экземпляра, который я использую при создании редактора. Проблема возникает, когда я использую ajax для изменения страницы, а CKEditor (и все остальные переменные javascript) остаются на странице. Таким образом, событие onChange заканчивается получением нескольких привязок ... что может вызвать проблемы с производительностью.

ответ

6

В документации к CKEditor отсутствует метод removeListener, который вы можете найти с помощью Firebug. Я добавил его сейчас, но может потребоваться целый день, пока он не будет опубликован.

Вы просто должны вызвать этот метод на объект события, например:

CKEDITOR.on('currentInstance', function(ev) 
{ 
     ev.removeListener(); 

     if (CKEDITOR.instances[element_id].checkDirty()) { 
      unsaved_changes = true; 
     } 
}); 
+0

спасибо! = D Это именно то, что я искал! – NullVoxPopuli

1
window.ckeditor=CKEDITOR.replace('ckeditor'); //create instance 

var focus_action =function(){ console.log('focus'); }; /*callback must have own name*/

ckeditor.on('instanceReady',function(){ var _this=this;

this.document.on('keyup',function(){ 
    console.log(ckeditor.checkDirty()); 
    }); 

    this.document.on('focus',focus_action); //bind our callback 


    this.document.on('blur',function(){ 
    console.log('blur'); 
    _this.document.removeListener('focus',focus_action); //remove our callback 
    //_this.document.removeAllListeners(); //remove all listeners 
    }); 

});