Я использую jQuery и TinyMCE для отправки формы, но существует проблема сериализации, заключающаяся в том, что значение Textarea не публикуется.
Вот код:
<form id="myForm" method="post" action="post.php">
<textarea name="question_text" id="question_text" style="width:543px;height:250px;"></textarea>
</form>
язык: 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]",
});
Не могли бы вы объяснить мне, что мне следует изменить и почему, чтобы значение было опубликовано в текстовой области?
$('#textarea_id').tinymce().save();
в обработчике onSubmit вашей формы.Вы можете настроить TinyMCE следующим образом, чтобы значения скрытых текстовых полей синхронизировались по мере внесения изменений с помощью редакторов TinyMCE:
Элементы textarea будут обновляться автоматически, и вам не потребуются дополнительные шаги перед сериализацией форм и т. Д.
Это было протестировано на TinyMCE 4.0.
Демо работает по адресу: http://jsfiddle.net/9euk9/49/
Обновление: приведенный выше код был обновлен на основе комментария DOOManiac.
источник
tinemce.triggerSave()
вызываетsave()
функцию для ВСЕХ ваших активных редакторов. Если у вас их несколько, более эффективно настроить функцию onChange следующим образом:editor.on('change', editor.save);
Из форм TinyMCE, jQuery и Ajax :
источник
Это потому, что это больше не текстовое поле. Он заменен на iframe (и еще много чего), а функция сериализации получает данные только из полей формы.
Добавьте в форму скрытое поле:
Перед публикацией формы получите данные из редактора и введите в скрытое поле:
(Редактор, конечно, позаботится об этом сам, если вы разместите форму в обычном режиме, но поскольку вы очищаете форму и отправляете данные самостоятельно, не используя форму, событие onsubmit в форме никогда не запускается.)
источник
Когда вы запускаете ajax в своей форме, вам нужно сообщить TinyMCE, что сначала нужно обновить текстовое поле:
источник
Я использовал:
Это все, что вам нужно сделать.
источник
Это обеспечит сохранение содержимого, когда вы потеряете фокус текстового поля.
источник
источник
Вы также можете просто использовать плагин jQuery и пакет для TinyMCE, он решает подобные проблемы.
источник
У меня была эта проблема какое-то время, и
triggerSave()
она не работала, как и другие методы.Итак, я нашел способ, который сработал для меня (я добавляю его сюда, потому что другие люди, возможно, уже пробовали triggerSave и т.д ...):
Когда вы отправляете свою форму или что-то еще, что вам нужно сделать, это получить данные из вашего селектора (в моем случае :),
.tinymce
используя$('.tinymce').text()
.источник
@eldar: У меня была такая же проблема с 3.6.7, работающим в «нормальном режиме»; и ни триггерSave, ни save () не работали.
Я перешел на плагин jQuery TinyMCE, и теперь он работает без каких-либо дополнительных действий. Я предполагаю, что где-то по ходу дела они реализовали какой-то автоматический triggerSave для jQuery-версии TinyMCE.
источник
tinyMCE.triggerSave()
самом деле у меня все отлично работает в нормальном режиме. Но вы правы, что в режиме jquery уже есть какое-то автоматическое сохранение, что противоречит tinymce.com/wiki.php/Plugin:autosave : «Этот плагин, скорее всего, будет расширен в будущем, чтобы обеспечить поддержку автоматического сохранения AJAX».Я просто скрываю () форму tinymce и отправляю, измененное значение textarea отсутствует. Итак, я добавил это:
Меня устраивает.
источник
tinyMCE.triggerSave();
кажется правильным ответом, поскольку он синхронизирует изменения из iFrame с вашим текстовым полем.Чтобы добавить к другим ответам - зачем вам это нужно? Некоторое время я использовал tinyMCE и не сталкивался с проблемами, когда поля формы не проходили. После некоторого исследования выяснилось, что это их «автоматическое исправление» отправки элементов формы, которое по умолчанию включено - http://www.tinymce.com/wiki.php/Configuration3x:submit_patch
По сути, они переопределяют
submit
вызовtriggerSave
заранее, но только если этоsubmit
еще не было переопределено чем-то другим:Итак, если что-то еще в вашем коде (или другой сторонней библиотеке)
submit
не сработает, их «автоматическое исправление» не сработает, и возникнет необходимость позвонитьtriggerSave
.РЕДАКТИРОВАТЬ: И на самом деле в случае OP
submit
вообще не вызывается. Поскольку это ajax'd, это позволяет обходить "автоматическое исправление", описанное выше.источник
Прежде всего:
Вы должны включить плагин tinymce jquery на свою страницу (jquery.tinymce.min.js)
Один из самых простых и безопасных способов - использовать
getContent
иsetContent
с помощью triggerSave. Пример:источник