2010-08-10 148 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。

相关问题