Как ajax-отправить форму textarea из CKEditor?
Я использую CKEditor, jQuery и jQuery form plugin, и я хотел бы отправить содержимое формы 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
;
Что я сделал неправильно или как я могу достичь того, что мне нужно?
Спасибо.
Ответы
Ответ 1
вам нужно сначала вызвать следующее, чтобы 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();
}
Ответ 2
Это работает для меня лучше всего: beforeSerialize callback
$('form#description').ajaxForm({
beforeSerialize:function($Form, options){
/* Before serialize */
for ( instance in CKEDITOR.instances ) {
CKEDITOR.instances[instance].updateElement();
}
return true;
},
// other options
});
Ответ 3
Если вы используете плагин jQuery, вы можете использовать опцию beforeSubmit для более элегантного решения:
$("#form").ajaxForm({
beforeSubmit: function()
{
/* Before submit */
for ( instance in CKEDITOR.instances )
{
CKEDITOR.instances[instance].updateElement();
}
},
// ... other options
});
Ответ 4
В моем случае мне помогло следующее: я просто использую эти две строки перед тем, как заархивировать форму.
for ( instance in CKEDITOR.instances )
CKEDITOR.instances[instance].updateElement();
var data = $('#myForm').serializeArray();
Ответ 5
Я пробовал что-то вроде этого:
Сначала мне пришлось поместить id = "#myForm" в @Html.BeginForm после этого, я поместил их в свою часть скриптов, где я использую script:
<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>
Ответ 6
Я просто сделал это так:
$('#MyTextArea').closest('form').submit(CKupdate);
function CKupdate() {
for (instance in CKEDITOR.instances)
CKEDITOR.instances[instance].updateElement();
return true;
}