0

jQuery ダイアログで ckeditor を開こうとしていますが、最初に ckeditor ボックスを完璧に開きます。もう一度クリックすると、jQuery ダイアログはエディターなしでテキストエリアで読み込まれます。

私はそれを適切に破棄したり、再初期化したりしていないため、それを想定しています。

<script type="text/javascript">
if (CKEDITOR.instances['ContentText']) {
CKEDITOR.remove(CKEDITOR.instances['ContentText']);
}

CKEDITOR.replace('ContentText',
{

disableObjectResizing: true,
resize_enabled: false,
shiftEnterMode: CKEDITOR.ENTER_BR,
toolbarCanCollapse: false,
forcePasteAsPlainText: true
});
</script>

<script type="text/javascript">
if (CKEDITOR.instances.ContentText) {
CKEDITOR.instances.ContentText.destroy();

}

CKEDITOR.replace('ContentText',
{

disableObjectResizing: true,
resize_enabled: false,
shiftEnterMode: CKEDITOR.ENTER_BR,
toolbarCanCollapse: false,
forcePasteAsPlainText: true
});
</script>

これは、ビューのダイアログを閉じる機能で試した部分ビューのフォームの最後にあるコードで、エディターの破棄を試みました。実際のコードを確認したい場合は、デプロイできます。

4

2 に答える 2

0

おそらく、ダイアログを 2 回目に開いたときに CKeditor を初期化していないことが原因です。ページの読み込み時に初めて発生します。しかし、モーダル ダイアログが 2 回目におそらく dom (html) 要素を更新し、これらの新しい要素には ckeditor が添付されていません。

これは、クリックしてダイアログを開くときに初期化コードを実行することで解決できます。最善の方法は、関数に ckeditor コードをスローし、それをダイアログをトリガーするクリック イベントに追加することです。

しかし、ダイアログを開くコードを投稿していないので、間違っている可能性があります。

于 2012-09-04T23:07:39.507 に答える
0

使用してみてください:

CKEDITOR.editor.prototype.destroy

それ以外の

CKEDITOR.remove

また、ダイアログが開かれたときに呼び出される CKE コードを含む関数を作成する必要があります (インスタンスの破棄と再インスタンス化の両方)。

これらの両方が役に立たない場合は、テキストエリアの名前を変更して、作成した新しい名前で呼び出すことができます。

var newCKname = "ContentText" + Math.floor((Math.random()*50)+1);
$('#ContentText').attr('id',newCKname);
[instantiate CKE again with the newCKname]
于 2012-09-04T23:09:28.950 に答える