2010-08-10 145 views
18

我如何知道CKEditor是否已加載?我查看了API文檔,但只能找到加載的事件。我想檢查CKEditor是否被加載,因爲如果我第二次加載它,我的textareas消失。如何確定CKEditor是否已加載?

回答

1

我已經瀏覽了API文檔,但只能找到加載的事件。

我不知道是否存在一個特定的屬性 - 有可能! - 但你可以使用加載的事件來設置一個全局標誌。這不是很好,但會完成這項工作。

// At the top of the script 
CKEDitor_loaded = false; 

// then later 
CKEDITOR.on('loaded', function(){ CKEditor_loaded = true; }); 

而是一個全局變量,你也可以考慮設置裏面CKEDITOR東西:

CKEDITOR.flag_loaded = true; 

這將是一個有點清潔。

+0

如何卸載所有實例? – friedkiwi 2010-08-10 10:22:30

+0

@Yvan我不知道。你爲什麼需要這樣做? – 2010-08-10 10:25:19

+0

,因爲如果我意外加載一次兩次,我的頁面會損壞並需要刷新。由於我的應用程序完全是由AJAX驅動的,所以這並不好。 – friedkiwi 2010-08-10 11:02:37

24

loaded事件沒有爲我工作。 instanceReady工作:

CKEDitor_loaded = false; 

CKEDITOR.on('instanceReady', function(){ CKEditor_loaded = true; }); 
+3

還沒有CKEDITOR,所以我怎麼能檢測到它?什麼時候準備好了會不會開火? – 2014-03-22 14:17:02

+0

你可以嘗試把它放在JS小提琴? – 2014-03-22 14:20:48

+0

如果窗口會觸發「ckeditorReady」,那麼所有人都會很高興。我忘了提及我通過ajax(在帶有PrototypeJS更新程序的父標記中)按需加載它。粘貼所有內容會很麻煩,但它所做的是:當更新程序結束時(onComplete)它會初始化它自己和孩子。並在相關的孩子的初始化我已經這樣做:http://jsfiddle.net/yzxWv/2/ – 2014-03-22 18:01:43

0

我知道這是一個非常古老的職位,但在我的研究它不停地來了。我動態加載CKEditorjQuery。正如你發現的那樣,我不想多次加載它。

簡單的解決方案:

if (!window.CKEDITOR) { 
    // (not loaded yet, your code to load it) 
} 
3
var waitCKEDITOR = setInterval(function() { 
    if (window.CKEDITOR) { 
     clearInterval(waitCKEDITOR); 
     //CKEDITOR.replace(...); 
    } 
}, 100/*milli*/); 
0

希望這可以幫助別人。

我也通過AJAX加載一個帶有CKEDITOR功能的頁面片段,因此我遇到了這個問題中提到的許多問題。這是我的解決方案:

function setCk(id){ 
if(window.CKEDITOR){ 
    var _instId = CKEDITOR.instances[id]; 
    if(_instId == undefined){ 
     CKEDITOR.inline(id); 
    }else{ 
     CKEDITOR.instances[id].destroy(); 
     CKEDITOR.inline(id); 
    } 
} 

}

在這個片斷我注入一個腳本元素入目一起setCk(textareaId)的調用每個Ajax響應。訣竅是銷燬目標ID爲&的任何先前的CKEDITOR實例在每次加載AJAX代碼片段後重新初始化CKEDITOR。

相關問題