2

JQuery UI ダイアログで CKEditor の複数のインスタンスを作成する際に問題が発生しています。ダイアログは AJAX を介してリモート フォームをロードするため、ダイアログを閉じて再度開き、エディターの新しいインスタンスを作成できるようにすることが目標です。デフォルトのオプションでは、ダイアログを再度開くと、その名前のエディターが既に存在するというエラーが表示されます。そのため、エディター インスタンスを破棄する方法をいくつか試しましたが、いずれも同じ問題が発生します。エディターをリロードすると、テキスト領域に null と表示され、ボタンが機能しません。

現在、インスタンスを破棄するこの方法を使用しています。

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

ここからダウンロードできる単純な html ファイルをいくつか使用して、この問題を再現しました。

編集:名前が異なるテキスト領域を持つ2つのリモートファイルを使用しようとしましたが、同じ問題が発生しました。一方のダイアログを開いてから閉じると、もう一方のダイアログを開いたときに「null」の CKEditor が表示されます。

また、どうやらこれは Safari のみの問題のようです。

4

3 に答える 3

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 に答える
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 に答える
0

私がやること:

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