Как ajax-отправить форму ввода текста из CKEditor? - PullRequest
50 голосов
/ 15 июля 2010

Я использую плагин формы CKEditor, jQuery и jQuery , и я хотел бы отправить содержимое формы CkEditor через запрос Ajax. Вот мой код:

<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 ]

137 голосов
/ 15 июля 2010

вам нужно сначала вызвать следующее, чтобы заставить CKEDITORs обновить свои связанные поля.

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();
}
17 голосов
/ 10 февраля 2012

Это работает для меня лучше всего: beforeSerialize callback

$('form#description').ajaxForm({
    beforeSerialize:function($Form, options){
        /* Before serialize */
        for ( instance in CKEDITOR.instances ) {
            CKEDITOR.instances[instance].updateElement();
        }
        return true; 
    },
    // other options
});
8 голосов
/ 01 августа 2011

Если вы используете плагин формы jQuery , вы можете использовать опцию beforeSubmit для более элегантного решения:

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

  // ... other options
});
6 голосов
/ 12 июля 2012

В моем случае мне помогло следующее, я просто использую эти две строки перед запуском формы.

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

  var data = $('#myForm').serializeArray();
3 голосов
/ 03 декабря 2012

Я пробовал что-то вроде этого:

Сначала я должен был поместить id = "#myForm" в @ Html.BeginForm, затем я поместил их в часть сценариев, где я использую сценарий:

<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>
1 голос
/ 22 апреля 2011

Я просто сделал это так:

$('#MyTextArea').closest('form').submit(CKupdate);

        function CKupdate() {
            for (instance in CKEDITOR.instances)
                CKEDITOR.instances[instance].updateElement();
            return true;
        }
...