如何ajax提交来自CKEditor的表单textarea输入?

IT技术 javascript jquery ckeditor forms jquery-forms-plugin
2021-02-20 11:25:20

我正在使用 CKEditor、jQuery 和jQuery 表单插件,我想通过 Ajax 查询提交 CkEditor 表单的内容。这是我的代码:

<form id="article-form" name="article-form" method="post" action="/myproject/save">
  <textarea name="bodyText" style="visibility: hidden; display: none;"></textarea>
  <script type="text/javascript">
    CKEDITOR.replace('bodyText');
  </script>

  <a onClick="$("#article-form").ajaxSubmit();">Submit</a>

</form>

不幸的是,Ajax 请求似乎没有传递bodyText参数;

我做错了什么或者我怎样才能实现我的需要?

谢谢你。

6个回答

您需要首先调用以下内容,以使 CKEDITOR 更新其相关字段..

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

所以

HTML

<a onClick="CKupdate();$('#article-form').ajaxSubmit();">Submit</a>

和 javascript

function CKupdate(){
    for ( instance in CKEDITOR.instances )
        CKEDITOR.instances[instance].updateElement();
}
谢谢你。我需要在哪里调用此调用:在 CKEDITOR.replace 之前或 ajaxSubmit() 之前?
2021-04-26 11:25:20
@fabien,我相信您CKEDITOR.replace应该textareaform..的名称而不是 ID作为参数,所以它应该是CKEDITOR.replace('bodyText')
2021-05-04 11:25:20
行。它在 ajaxSubmit() 之前放置时起作用。非常感谢你
2021-05-12 11:25:20
通过替换加载编辑器后,您可以添加这一行 >>> CKEDITOR.instances.textAreaClientId.on('blur', function(){CKEDITOR.instances.textAreaClientId.updateElement();});
2021-05-12 11:25:20

这对我最有效:beforeSerialize 回调

$('form#description').ajaxForm({
    beforeSerialize:function($Form, options){
        /* Before serialize */
        for ( instance in CKEDITOR.instances ) {
            CKEDITOR.instances[instance].updateElement();
        }
        return true; 
    },
    // other options
});
这是对的。您需要在序列化之前执行此操作,否则您使用 updateElement() 更新的数据将不会在您下次尝试序列化数据时更新。
2021-04-19 11:25:20
非常感谢!!只有这对我也有效。再次感谢。
2021-05-01 11:25:20
非常感谢!!只有这对我有用,我同意#stormlifter
2021-05-12 11:25:20

如果您使用jQuery 表单插件,您可以使用 beforeSubmit 选项以获得更优雅的解决方案:

$("#form").ajaxForm({
    beforeSubmit:  function()
{
        /* Before submit */
    for ( instance in CKEDITOR.instances )
    {
        CKEDITOR.instances[instance].updateElement();
    }
},

  // ... other options
});

就我而言,以下内容对我有帮助,我只是在密封表单之前使用这两行。

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

  var data = $('#myForm').serializeArray();

我试过这样的事情:

首先,我必须在@Html.BeginForm 上放置一个 id = "#myForm" 之后,我将这些放在我使用脚本的脚本部分中:

<script type="text/javascript">
    $(document).ready(function CKupdate() {
        $('#myForm').ajaxForm(function () {
            for (instance in CKEDITOR.instances) {
                CKEDITOR.instances[instance].updateElement();
            }
        });       
    });
</script>

然后我为我的提交按钮做了这样的事情 =] 对我来说效果很好,不再按两次提交 =]

<button type="submit" id="submitButton" onclick="CKupdate();$('#myForm').ajaxSubmit();">Submit</button>