如何正确销毁CKEditor实例?

时间:2010-08-31 21:02:52

标签: javascript ckeditor

我在一个非常简单的页面上运行CKeditor 3.4。我有一个问题(有时),当我调用document.main_form.submit()时,它不会发送textarea的内容。经过一些阅读,听起来像CKeditor没有正确破坏。我在保存表单之前尝试手动销毁它,但无法调用它。奇怪的是,它有时会起作用,但不会起作用。我在Chrome上,因此可能会搞砸事情,但Firefox中也会发生同样的事情。

如何正确销毁CKeditor,以便它始终在POST中发送textarea数据。谢谢!

7 个答案:

答案 0 :(得分:36)

我有这个问题。多么痛苦。

要正确销毁编辑器实例,请尝试

if (CKEDITOR.instances.myInstanceName) CKEDITOR.instances.myInstanceName.destroy();

来自文档here

我通过在回发之前将编辑器的内容分配到隐藏字段来解决了缺少的内容问题。我正在使用ASP.Net,但它应该普遍使用。

在提交按钮的客户端点击处理程序中,调用

if (CKEDITOR.instances.myInstanceName)
    document.getElementById('hiddenField').value = CKEDITOR.instances.getData();

答案 1 :(得分:14)

我曾经为每个子视图使用了angularjs ui-router和一个CKEDITOR实例。每次加载ui-view时,我都使用以下解决方案来清除实例

for(name in CKEDITOR.instances)
{
    CKEDITOR.instances[name].destroy()
}

答案 2 :(得分:8)

在我的情况下

CKEDITOR.instances.myInstanceName.destroy();

没有帮助,因为我在jquery dialog上双击某个项目时打开了CKEditor。当我关闭编辑器然后再次打开它们时,我的代码崩溃了 解决方案正在使用

CKEDITOR.instances.myInstanceName.destroy(false);

更新了DOM元素(link to documentation)。

答案 3 :(得分:6)

使用这个简单的代码。注意我的文本区域ID是 editor1
或者您也可以使用console.log(CKEDITOR.instances.editor1);

进行检查
if (CKEDITOR.instances.editor1) {
     CKEDITOR.instances.editor1.destroy();
}

答案 4 :(得分:5)

for(name in CKEDITOR.instances){ CKEDITOR.instances[name].destroy() }

用于编码以销毁由ckeditor

创建的所有实例

答案 5 :(得分:-1)

最终确实有效的解决方案。

问题是如果你销毁一个ckeditor并随后尝试替换一个不起作用的textarea。

我发现这个简单的例子给了我线索。使用div并附加ckeditor而不是使用replace api call

http://ckeditor.com/latest/samples/old/ajax.html

<div id='emailEditor1'>
              </div>

function closeTab() {
    emailEditor1.destroy();
    emailEditor1 = null;
}

function createEditor() 
    if (emailEditor1 == null) {
        emailEditor1 = CKEDITOR.appendTo( 'emailEditor1');
    }
}

答案 6 :(得分:-2)

$this->widget('cms.extensions.fancybox.EFancyBox', array(
    'target' => 'a#fancy-link',
    'config' => array( 'onClosed'=>'js:function(){for(name in CKEDITOR.instances){ CKEDITOR.instances[name].destroy(true);}}'
)));
相关问题