Ich verwende jQuery und TinyMCE , um ein Formular zu senden, aber es gibt ein Problem bei der Serialisierung, da der Textarea-Wert nicht veröffentlicht wird.
Hier ist der Code:
<form id="myForm" method="post" action="post.php">
<textarea name="question_text" id="question_text" style="width:543px;height:250px;"></textarea>
</form>
Sprache: lang-js
$('#myForm').submit(function() {
$.ajax({
type: 'POST',
url: $(this).attr('action'),
data: $(this).serialize(),
success: function(data) {
$('#result').fadeIn('slow');
$('#result').html(data);
$('.loading').hide();
}
})
return false;
});
tinyMCE.init({
// General options
mode : "textareas",
theme : "advanced",
// Theme options
theme_advanced_buttons1 : "bold,italic,underline,separator,image,separator,justifyleft,justifycenter,justifyright,jformatselect,fontselect,fontsizeselect,justifyfull,bullist,numlist,undo,redo,styleprops,cite,link,unlink,media,advhr,code,preview",
theme_advanced_buttons2 : "",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
theme_advanced_statusbar_location : "bottom",
theme_advanced_resize_horizontal : false,
theme_advanced_resizing : true,
extended_valid_elements :"a[name|href|target|title|onclick],img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name],hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]",
});
Können Sie mir erklären, was ich ändern sollte und warum, um den Wert im Textbereich zu erhalten?
$('#textarea_id').tinymce().save();
im onSubmit-Handler Ihres Formulars.Sie können TinyMCE wie folgt konfigurieren, um die Werte ausgeblendeter Textbereiche synchron zu halten, wenn Änderungen über TinyMCE-Editoren vorgenommen werden:
Die Textbereichselemente werden automatisch auf dem neuesten Stand gehalten und Sie benötigen keine zusätzlichen Schritte, bevor Sie Formulare usw. serialisieren.
Dies wurde auf TinyMCE 4.0 getestet
Demo läuft unter: http://jsfiddle.net/9euk9/49/
Update: Der obige Code wurde basierend auf dem Kommentar von DOOManiac aktualisiert
quelle
tinemce.triggerSave()
Ruft diesave()
Funktion für ALLE Ihre aktiven Editoren auf. Wenn Sie mehr als eine haben, ist es effizienter, Ihre onChange-Funktion wieeditor.on('change', editor.save);
Aus TinyMCE-, jQuery- und Ajax-Formularen :
quelle
Das liegt daran, dass es kein Textbereich mehr ist. Es wird durch einen Iframe (und so weiter) ersetzt, und die Serialisierungsfunktion ruft nur Daten aus Formularfeldern ab.
Fügen Sie dem Formular ein verstecktes Feld hinzu:
Holen Sie sich vor dem Absenden des Formulars die Daten aus dem Editor und geben Sie sie in das ausgeblendete Feld ein:
(Der Editor würde sich natürlich selbst darum kümmern, wenn Sie das Formular normal veröffentlichen. Wenn Sie jedoch das Formular abkratzen und die Daten selbst senden, ohne das Formular zu verwenden, wird das Ereignis onsubmit im Formular niemals ausgelöst.)
quelle
Wenn Sie Ajax in Ihrem Formular ausführen, müssen Sie TinyMCE anweisen, zuerst Ihren Textbereich zu aktualisieren:
quelle
Ich benutzte:
Das ist alles was Sie tun müssen.
quelle
Dadurch wird sichergestellt, dass der Inhalt gespeichert wird, wenn Sie den Fokus des Textbereichs verlieren
quelle
quelle
Sie können auch einfach das jQuery-Plugin und -Paket für TinyMCE verwenden, um diese Probleme zu lösen.
quelle
Ich hatte dieses Problem für eine Weile und
triggerSave()
funktionierte nicht, auch keine der anderen Methoden.Also habe ich einen Weg gefunden, der für mich funktioniert hat (ich füge diesen hier hinzu, weil andere Leute möglicherweise bereits triggerSave und so weiter ausprobiert haben ...):
Wenn Sie Ihre Form sind einreichen oder was auch immer alles , was Sie tun müssen, ist die Daten greifen von Ihrem Wähler (In meinem Fall:
.tinymce
) verwendet$('.tinymce').text()
.quelle
@eldar: Ich hatte das gleiche Problem mit 3.6.7 im "normalen Modus"; und weder triggerSave noch save () funktionierten.
Ich habe zum jQuery TinyMCE-Plugin gewechselt und ohne etwas anderes tun zu müssen, funktioniert es jetzt. Ich gehe davon aus, dass sie irgendwann eine Art Auto TriggerSave für die jQuery-Version von TinyMCE implementiert haben.
quelle
tinyMCE.triggerSave()
funktioniert im normalen Modus für mich einwandfrei . Sie haben jedoch Recht, dass es im jquery-Modus bereits eine Art automatisches Speichern gibt, was tinymce.com/wiki.php/Plugin:autosave widerspricht : "Dieses Plugin wird höchstwahrscheinlich in Zukunft erweitert, um AJAX-Unterstützung für das automatische Speichern bereitzustellen."Ich verstecke () nur das Tinymce und sende das Formular, der geänderte Wert des Textbereichs fehlt. Also habe ich folgendes hinzugefügt:
Für mich geht das.
quelle
tinyMCE.triggerSave();
scheint die richtige Antwort zu sein, da Änderungen vom iFrame mit Ihrem Textbereich synchronisiert werden.Um die anderen Antworten zu ergänzen - warum brauchen Sie das? Ich hatte tinyMCE für eine Weile verwendet und war nicht auf Probleme mit Formularfeldern gestoßen, die nicht durchgekommen waren. Nach einigen Recherchen stellte sich heraus, dass es sich um das "automatische Patchen" von Formularelementübermittlungen handelt, das standardmäßig aktiviert ist - http://www.tinymce.com/wiki.php/Configuration3x:submit_patch
Grundsätzlich definieren sie neu
submit
, umtriggerSave
vorher anzurufen , aber nur, wenn diessubmit
noch nicht durch etwas anderes neu definiert wurde:Wenn also etwas anderes in Ihrem Code (oder einer anderen Bibliothek eines Drittanbieters) in Konflikt gerät
submit
, funktioniert das "automatische Patchen" nicht und es ist notwendig, es aufzurufentriggerSave
.EDIT: Und tatsächlich wird im Fall des OP überhaupt
submit
nicht aufgerufen. Da es ajax'd ist, wird das oben beschriebene "automatische Patchen" umgangen.quelle
Zuerst:
Sie müssen das Tinymce JQuery Plugin in Ihre Seite aufnehmen (jquery.tinymce.min.js).
Eine der einfachsten und sichersten Möglichkeiten ist die Verwendung
getContent
und VerwendungsetContent
von triggerSave. Beispiel:quelle