CKEditor 更新 texarea 值的问题

Posted

技术标签:

【中文标题】CKEditor 更新 texarea 值的问题【英文标题】:CKEditor problems updating texarea's value 【发布时间】:2011-12-03 00:36:10 【问题描述】:

在我的 php 程序中,我以常规方式在页面加载时或在使用 ajax 调用的对话框中显示输入表单。

有两种方法可以从 textarea 创建 CKEditor。要么使用jQuery

$("#textareaid").ckeditor();

window["textareaid"] = CKEDITOR.replace("textareaid");

在两种情况下,无论是在页面加载时还是在 ajax 调用之后,这两种方法都会创建我的富文本编辑器来代替我的 textarea。没关系。

问题从这里开始。在这些情况下,CKEditor 启动时没有任何控制台错误,但它从不更新 textarea 值并始终发送旧值。

1) 如果我在页面加载时创建我的文本区域并使用$("#textareaid").ckeditor();。 CKEditor 启动正常,没有任何控制台错误,但在常规表单提交时,发送的值为空(旧值)。

2) 如果我在 ajax 调用后创建我的 textarea 并使用 window["textareaid"] = CKEDITOR.replace("textareaid"); 。 CKEditor 再次正确启动,但如果我执行 $("form").serialize() 并提醒结果,我看到 textarea 值为空(旧值)。

我现在无法创建演示页面并上传,我知道没有我的代码没有人会尝试复制这个问题(至少我不会因为我太懒了)

我会准备一个演示页面来为你们复制这个问题,但在那之前我想问一下这里是否有人遇到过同样的问题并知道原因或找到了解决方案?

谢谢

【问题讨论】:

从来没有这个问题。如果您使用 Firebug 检查 textarea 并同时输入 textarea,您是否看到您的文本被添加到标签之间? @Chris G. 在 Chrome 和 Firfox CKEditor 上都不会更新 textarea 标签之间的数据。我还检查了 CKEditor 的实际示例文件,它们也没有更新。 @ergec 你试过我的解决方案了吗? 【参考方案1】:

如果你打电话应该没问题:

 CKEDITOR.instances[your instance].updateElement();

eaxmple 中的“您的实例”将只是 textareaid,因为这就是您在 CKEDITOR.replace() 函数中使用的内容

在序列化表单之前。

几天前遇到了完全相同的问题:)

【讨论】:

我的仍然没有工作它的说法“未捕获的类型错误:无法读取未定义的属性'updateElement'” @HabibRehman 抱歉,这个答案来自 2011 年 10 月...我认为您应该研究更多当前的富文本编辑器 :) 谢谢。这正是我的问题。我刚刚输入了 ajax 的序列化,之前我只是通过 POST 发送表单。这是一个很难发现的错误。【参考方案2】:

我刚刚经历了同样的症状,它似乎与使用 id 来选择 textarea 的对象而不是使用 jQuery 适配器的名称有关。 jQuery 适配器上的参考资料确实指出,当它是 textarea 时,它会自动将此值发回,因此它可能无法正确验证为带有 jquery $("#myTextarea").ckeditor();的 textarea

如果您想保留 id 选择器,一个选项是使用一个隐藏字段,其中包含您在提交表单时将值发送到的最终表单字段名称。 $("#myHiddenField").val($("#myTextarea").val());

【讨论】:

【参考方案3】:

通过替换加载编辑器后,您可以添加此行

CKEDITOR.instances.textAreaClientId.on('blur', function() CKEDITOR.instances.textAreaClientId.updateElement(););

【讨论】:

以上是关于CKEditor 更新 texarea 值的问题的主要内容,如果未能解决你的问题,请参考以下文章

Ckeditor通过Ajax更新数据

Django Ckeditor 的 Youtube 插件已更新

Ckeditor更新textarea

ckeditor不会发布更新的内容

CKEDITOR - 在 Laravel 5 中使用 AJAX 更新/创建产品失败

texarea禁止拖动