Używam jQuery i TinyMCE do przesyłania formularza, ale występuje problem z serializacją polegający na tym, że wartość Textarea nie jest wysyłana.
Oto kod:
<form id="myForm" method="post" action="post.php">
<textarea name="question_text" id="question_text" style="width:543px;height:250px;"></textarea>
</form>
język: 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]",
});
Czy możesz mi wyjaśnić, co powinienem zmienić i dlaczego, aby uzyskać wartość w opublikowanym obszarze tekstowym?
$('#textarea_id').tinymce().save();
w module obsługi onSubmit twojego formularza.Możesz skonfigurować TinyMCE w następujący sposób, aby zachować synchronizację wartości ukrytych obszarów tekstu, gdy zmiany są wprowadzane za pośrednictwem edytorów TinyMCE:
Elementy textarea będą aktualizowane automatycznie i nie będziesz potrzebować żadnych dodatkowych kroków przed serializacją formularzy itp.
Zostało to przetestowane na TinyMCE 4.0
Demo działa pod adresem: http://jsfiddle.net/9euk9/49/
Aktualizacja: Powyższy kod został zaktualizowany na podstawie komentarza DOOManiaca
źródło
tinemce.triggerSave()
wywołujesave()
funkcję WSZYSTKICH aktywnych redaktorów. Jeśli masz więcej niż jeden, bardziej efektywne jest ustawienie funkcjieditor.on('change', editor.save);
Z formularzy TinyMCE, jQuery i Ajax :
źródło
To dlatego, że to już nie jest textarea. Jest zastępowany ramką iframe (i tak dalej), a funkcja serializacji pobiera dane tylko z pól formularza.
Dodaj ukryte pole do formularza:
Przed wysłaniem formularza pobierz dane z edytora i umieść w ukrytym polu:
(Redaktor oczywiście sam by się tym zajął, gdybyś opublikował formularz normalnie, ale ponieważ sam zeskrobujesz formularz i wysyłasz dane bez korzystania z formularza, zdarzenie onsubmit w formularzu nigdy nie jest wyzwalane).
źródło
Kiedy uruchamiasz Ajax w swoim formularzu, musisz powiedzieć TinyMCE, aby najpierw zaktualizował twój textarea:
źródło
Użyłem:
To wszystko, co musisz zrobić.
źródło
Zapewni to zapisanie zawartości, gdy stracisz koncentrację na obszarze tekstu
źródło
źródło
Możesz także po prostu użyć wtyczki jQuery i pakietu dla TinyMCE, który rozwiązuje tego rodzaju problemy.
źródło
Miałem ten problem przez jakiś czas i
triggerSave()
nie działał, podobnie jak żadna inna metoda.Więc znalazłem sposób, który zadziałał dla mnie (dodaję to tutaj, ponieważ inni ludzie mogli już próbować triggerSave itp.):
Kiedy przesyłasz swój formularz lub cokolwiek innego, co musisz zrobić, to pobrać dane z selektora (w moim przypadku
.tinymce
:) za pomocą$('.tinymce').text()
.źródło
@eldar: Miałem ten sam problem z 3.6.7 działającym w „trybie normalnym”; i ani triggerSave, ani save () nie działały.
Zmieniłem na wtyczkę jQuery TinyMCE i bez konieczności robienia czegokolwiek innego działa teraz. Zakładam, że gdzieś po drodze zaimplementowali jakiś rodzaj automatycznego wyzwalaczaSave dla wersji jQuery TinyMCE.
źródło
tinyMCE.triggerSave()
faktycznie działa dobrze dla mnie w trybie normalnym. Ale masz rację, że w trybie jquery istnieje już jakiś rodzaj automatycznego zapisywania, co jest sprzeczne z tinymce.com/wiki.php/Plugin:autosave : „Ta wtyczka najprawdopodobniej zostanie w przyszłości rozszerzona, aby zapewnić obsługę automatycznego zapisywania AJAX”.Po prostu ukrywam () tinymce i przesyłam formularz, brakuje zmienionej wartości textarea. Więc dodałem to:
Mi to pasuje.
źródło
tinyMCE.triggerSave();
wydaje się być poprawną odpowiedzią, ponieważ zsynchronizuje zmiany między ramką iFrame a obszarem tekstowym.Aby jednak dodać do innych odpowiedzi - dlaczego tego potrzebujesz? Używałem tinyMCE od jakiegoś czasu i nie napotkałem problemów z nieprzekazywaniem się pól formularza. Po kilku badaniach okazało się, że jest to ich „automatyczne łatanie” przesyłanych elementów formularza, które jest domyślnie włączone - http://www.tinymce.com/wiki.php/Configuration3x:submit_patch
Zasadniczo zmieniają definicję wcześniejszego
submit
połączeniatriggerSave
, ale tylko wtedy, gdysubmit
nie zostały jeszcze zdefiniowane przez coś innego:Tak więc, jeśli coś innego w Twoim kodzie (lub innej bibliotece innej firmy) ma problemy
submit
, ich „automatyczne łatanie” nie zadziała i konieczne będzie połączenietriggerSave
.EDYCJA: I właściwie w przypadku OP,
submit
nie jest w ogóle wywoływany. Ponieważ jest to ajax'd, jest to pomijanie "automatycznego łatania" opisanego powyżej.źródło
Po pierwsze:
Musisz dołączyć wtyczkę tinymce jquery do swojej strony (jquery.tinymce.min.js)
Jednym z najprostszych i najbezpieczniejszych sposobów jest użycie
getContent
i zasetContent
pomocą triggerSave. Przykład:źródło