wake-up-neo.com

Wie kann ich eine Formulartextbereichseingabe von CKEditor übermitteln?

Ich verwende CKEditor, jQuery und jQuery-Formular-Plugin und möchte Inhalte des CkEditor-Formulars über eine Ajax-Abfrage senden. Hier ist mein Code:

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

Leider scheint es, dass die Ajax-Anforderung den Parameter bodyText nicht übergibt.

Was habe ich falsch gemacht oder wie kann ich erreichen, was ich brauche?

Vielen Dank.

50
fabien7474

sie müssen zuerst Folgendes aufrufen, damit die CKEDITORs die zugehörigen Felder aktualisieren.

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

so

HTML

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

und Javascript

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

Das funktioniert bei mir am besten: vor Serialize Rückruf

$('form#description').ajaxForm({
    beforeSerialize:function($Form, options){
        /* Before serialize */
        for ( instance in CKEDITOR.instances ) {
            CKEDITOR.instances[instance].updateElement();
        }
        return true; 
    },
    // other options
});
17
Pepa Chmel

Wenn Sie das jQuery-Formular-Plugin verwenden, können Sie die beforeSubmit-Option für eine elegantere Lösung verwenden:

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

  // ... other options
});
8
Crewone

In meinem Fall hat mir das Folgende geholfen, ich benutze nur diese beiden Zeilen, bevor ich das Formular seialisiere.

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

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

Ich habe so etwas ausprobiert:

Zuerst musste ich eine id = "#myForm" auf @ Html.BeginForm setzen, danach habe ich diese in meinen Skriptteil eingefügt, in dem ich das Skript verwende:

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

und dann habe ich so etwas gemacht =] für meinen Submit-Button und es funktioniert gut für mich, nicht mehr zweimal auf Submit drücken =]

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

Ich habe es einfach so gemacht:

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

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