ckeditor不会发布更新的内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ckeditor不会发布更新的内容相关的知识,希望对你有一定的参考价值。

我正在使用ckeditor 4.6.2并遇到一个问题,如果我更改编辑器中的内容,它们不会通过ajax调用回发到服务器。

我的设置是这样的:

  • 带有ID #editor1的Textarea已经应用了ckeditor。
  • 在页面加载时,我使用ajax从数据库中将一些内容加载到编辑器中(这一切都正常)。
  • 我的提交按钮的ID为#sendBtn

然后我使用ajax来处理表单提交 - 按#sendBtn。帖子有效,但如果我在#editor1中编辑了内容,则会提交原始内容 - 页面加载时的内容,而不是编辑过的内容。

我穿过这个帖子How to ajax-submit a form textarea input from CKEditor?。我在ajax电话会议之前添加了接受的答案。所以我处理提交的jquery看起来像这样:

$('#sendBtn').click(function(e) {
    e.preventDefault();
    $('#sendBtn').prop( "disabled", true);
    var dataString = $("#emailForm").serialize();

    /**
     * https://stackoverflow.com/questions/3256510/how-to-ajax-submit-a-form-textarea-input-from-ckeditor 
     */
    for ( instance in CKEDITOR.instances )
        CKEDITOR.instances[instance].updateElement();

    $.ajax({
        url: "/admin/ajax/email",
        data: dataString,
        method: "POST",
      }).done(function(data) {
          // ...
      });
});

如果我使用php/admin/ajax/email转储POST数据,它将显示原始内容,而不是更新版本。

奇怪的是,如果我在浏览器控制台中运行它,它会返回true然后看起来有效:

for ( instance in CKEDITOR.instances )
    CKEDITOR.instances[instance].updateElement();

那么在进行ajax调用之前上面的代码没有完成的问题是什么?我该怎么处理?

答案

好吧有点晚了。

正如您的(非常有用的)引用所示,您必须在触摸表单之前更新CKEDITOR实例,因此:

$('#sendBtn').click(function(e) {
    e.preventDefault();
    $('#sendBtn').prop( "disabled", true);

    // This before:
    for ( instance in CKEDITOR.instances )
        CKEDITOR.instances[instance].updateElement();

    // Then this:
    var dataString = $("#emailForm").serialize();

    $.ajax({
        url: "/admin/ajax/email",
        data: dataString,
        method: "POST",
      }).done(function(data) {
          // ...
      });
});

以上是关于ckeditor不会发布更新的内容的主要内容,如果未能解决你的问题,请参考以下文章

CKEditor 不会加载 php 变量

将样式应用于 CKEditor 5 的 HTML 输出

ckeditor 更新文本区域

Ckeditor更新textarea

在 Laravel 的前端 vue.js 上未更新组件的内容

如何在更改事件上检测CKEditor源模式