我在一个非常简单的页面上运行CKeditor 3.4。有时会遇到问题,即在调用 document.main_form.submit()
时,它不会发送文本区域的内容。经过一些阅读,发现 CKeditor 没有正确地销毁。我尝试在保存表单之前手动销毁它,但无法调用它。奇怪的是,有时它能正常工作,有时不能。我使用 Chrome 浏览器,可能会对事情产生影响,但在 Firefox 中也会发生同样的事情。
如何正确销毁 CKeditor,以便始终在 POST 中发送文本区域数据。谢谢!
我在一个非常简单的页面上运行CKeditor 3.4。有时会遇到问题,即在调用 document.main_form.submit()
时,它不会发送文本区域的内容。经过一些阅读,发现 CKeditor 没有正确地销毁。我尝试在保存表单之前手动销毁它,但无法调用它。奇怪的是,有时它能正常工作,有时不能。我使用 Chrome 浏览器,可能会对事情产生影响,但在 Firefox 中也会发生同样的事情。
如何正确销毁 CKeditor,以便始终在 POST 中发送文本区域数据。谢谢!
我曾经遇到过这个问题,真是太烦人了。
为了正确销毁编辑器实例,请尝试
if (CKEDITOR.instances.myInstanceName) CKEDITOR.instances.myInstanceName.destroy();
根据这里的文档:
在提交之前,将编辑器的内容分配给隐藏字段可以解决缺失内容的问题。我正在使用ASP.Net,但它应该在任何地方都适用。
在提交按钮的客户端单击处理程序中调用:
if (CKEDITOR.instances.myInstanceName)
document.getElementById('hiddenField').value = CKEDITOR.instances.getData();
我曾经在使用angularjs ui-router时,为每个子视图使用了一个CKEDITOR实例。我用下面的解决方案来清除每次加载ui-view时的实例
for(name in CKEDITOR.instances)
{
CKEDITOR.instances[name].destroy()
}
CKEDITOR.instances.myInstanceName.destroy();
这并没有帮助,因为我在双击某个项目时,在jquery对话框
中打开了CKEditor。当我关闭编辑器然后再次打开它们时,我的代码崩溃了。
解决方法是使用
CKEDITOR.instances.myInstanceName.destroy(false);
更新了 DOM 元素(文档链接)。
CKEDITOR.instances.myInstanceName.destroy(true);
,但这也导致我们的代码崩溃,出现错误“TypeError:a为null”。然而,将其切换为false
并没有解决我们的问题。不得不在try / catch中包装这行代码。 - jgerman使用以下简单代码。请注意我的文本区域ID是editor1。
或者您也可以使用console.log(CKEDITOR.instances.editor1);
进行检查。
if (CKEDITOR.instances.editor1) {
CKEDITOR.instances.editor1.destroy();
}
for(name in CKEDITOR.instances){
CKEDITOR.instances[name].destroy()
}
使用上述代码摧毁由ckeditor创建的所有实例。
最终有效的解决方案。
问题是,如果你销毁了一个 ckeditor,然后尝试替换一个 textarea,那是行不通的。
我找到了这个简单的例子,给了我线索。使用 div 并附加 ckeditor,而不是使用 replace api 调用。
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');
}
}
$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);}}'
)));