在我的php程序中,我以常规方式在页面加载或使用ajax调用在对话框中显示输入表单。
有两种方法可以从textarea创建CKEditor。或者使用jQuery$("#textareaid").ckeditor();
或
window["textareaid"] = CKEDITOR.replace("textareaid");
这两种方法都在页面加载或ajax调用后创建富文本编辑器来代替文本区域。很好。
问题开始了。在这些情况下,CKEditor启动没有任何控制台错误,但它永远不会更新文本区域的值,总是发送旧值。
1)如果我创建我的文本区域页面加载和使用$("#textareaid").ckeditor();
。CKEditor初始化ok,没有任何控制台错误,但在常规表单提交时,发送的值为空(旧值)。
2)如果我创建我的文本区域后ajax调用和使用window["textareaid"] = CKEDITOR.replace("textareaid");
。CKEditor再次正确启动,但如果我执行$("form").serialize()并警告结果,我看到textarea值为空(旧值)。
我现在不能创建一个演示页面并上传,我知道没有我的代码没有人会试图复制这个问题(至少我不会,因为我很懒)
我将准备一个演示页面来复制这个问题,但在此之前,我想问这里是否有人遇到过同样的问题,知道原因或找到了解决方案?谢谢
如果您调用:
CKEDITOR.instances[your instance].updateElement();
'您的实例'在示例中将是简单的textareaid
,因为这是您在CKEDITOR.replace()
函数中使用的
几天前有完全相同的问题:)
我刚刚经历了同样的症状,它似乎与使用id来选择文本区域的对象而不是使用jQuery适配器的名称有关。jQuery适配器的参考资料确实指出,当它是一个文本区域时,它会自动将此值发送回,因此它可能无法正确地验证为jQuery $("#myTextarea").ckeditor();
如果你想保留id选择器,一个选项是使用一个隐藏字段,其中包含提交表单时发送值的最终表单字段名。$("#myHiddenField").val($("#myTextarea").val());
通过replace加载编辑器后,您可以添加以下行
CKEDITOR.instances.textAreaClientId.on('blur', function() CKEDITOR.instances.textAreaClientId.updateElement();});