2

我在 JQuery UI 对话框中创建 CKEditor 的多个实例时遇到问题。对话框通过 AJAX 加载远程表单,因此目标是能够关闭和重新打开对话框并拥有编辑器的新实例。使用默认选项,当重新打开对话框时,它会给出一个错误,指出具有该名称的编辑器已经存在。所以我尝试了几种破坏编辑器实例的方法,它们都导致了同样的问题。重新加载编辑器时,文本区域显示为 null 并且按钮不起作用。

目前我正在使用这种销毁实例的方法:

var instance = CKEDITOR.instances['test'];
if (instance) { CKEDITOR.remove(CKEDITOR.instances['test']); }

我用几个可在此处下载的简单 html 文件重新创建了该问题。

编辑:我刚刚尝试使用两个具有不同名称的文本区域的远程文件,但我遇到了同样的问题。当一个对话框打开然后关闭时,另一个对话框在打开时有一个“空”CKEditor。

此外,显然这只是 Safari 中的一个问题。

4

3 回答 3

1

这就是我所做的:

var CKeditors = {};
function loadEditors() {
    var $editors = $("textarea.ckeditor");
    if ($editors.length) {
        $editors.each(function() {
            var editorID = $(this).attr("id");
            if(CKeditors[editorID]){
                CKeditors[editorID].destroy();
                CKeditors[editorID] = null;
            }

            var dst = editorID+'-element';
            var html = '';
            if( $(this).val() ){
                html = $(this).val();
            }
            CKeditors[editorID] = CKEDITOR.appendTo(dst, {}, html);
        });
        $("textarea.ckeditor").hide();
    }
}

function updateCKEditors() {
    for(x in CKeditors){
        $("#"+x).val(CKeditors[x].getData());
    }
}

然后在ajax成功后我在做

loadEditors()

在表单提交之前(例如使用 ajax):

updateCKEditors()

你需要 jQuery 才能让它工作。这适用于 zend_forms,但经过几次更正后也应该可以在正常形式中使用。玩'dst'来做到这一点。

于 2011-03-31T13:02:39.903 回答
1

有点老话题,但我有一个类似的问题。

我在上面使用了 activ 的解决方案,效果很好! CKEDITOR.appendTo对我来说没有用,但是对它所做的功能进行了下一次轻微修改loadEditors

function loadEditors() {
    var $editors = $("textarea.ckeditor");
    if ($editors.length) {
        $editors.each(function() {
            var editorID = $(this).attr("id");
            if(CKeditors[editorID]){
                CKeditors[editorID].destroy();
                CKeditors[editorID] = null;
            }

            var dst = editorID+'-element';
            CKeditors[editorID] = CKEDITOR.replace(dst, {});
        });
    }
}
于 2012-02-21T10:47:42.760 回答
0

我所做的:

var instance = CKEDITOR.instances['test'];
instance.destroy();
instance = null;
于 2009-12-02T21:43:54.640 回答