Estou usando jQuery e TinyMCE para enviar um formulário, mas há um problema de serialização porque o valor Textarea não é postado.
Aqui está o código:
<form id="myForm" method="post" action="post.php">
<textarea name="question_text" id="question_text" style="width:543px;height:250px;"></textarea>
</form>
idioma: 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]",
});
Você pode me explicar o que devo alterar e por quê, para que o valor na área de texto seja postado?
$('#textarea_id').tinymce().save();
no manipulador onSubmit do seu formulário.Você pode configurar o TinyMCE da seguinte maneira para manter os valores das áreas de texto ocultas em sincronia conforme as alterações são feitas por meio dos editores TinyMCE:
Os elementos textarea serão mantidos atualizados automaticamente e você não precisará de nenhuma etapa extra antes de serializar os formulários, etc.
Isso foi testado no TinyMCE 4.0
Demonstração em execução em: http://jsfiddle.net/9euk9/49/
Atualização: O código acima foi atualizado com base no comentário do DOOManiac
fonte
tinemce.triggerSave()
chama asave()
função para TODOS os seus editores ativos. Se você tiver mais de um, é mais eficiente definir sua função onChange da seguinte forma:editor.on('change', editor.save);
Dos formulários TinyMCE, jQuery e Ajax :
fonte
Isso porque não é mais uma área de texto. Ele foi substituído por um iframe (e outros enfeites), e a função de serializar apenas obtém dados dos campos do formulário.
Adicione um campo oculto ao formulário:
Antes de postar o formulário, pegue os dados do editor e coloque no campo oculto:
(O editor, é claro, cuidaria disso sozinho se você postasse o formulário normalmente, mas como você está copiando o formulário e enviando os dados sem usar o formulário, o evento onsubmit no formulário nunca é acionado.)
fonte
Quando você executa o ajax em seu formulário, você precisa dizer ao TinyMCE para atualizar sua área de texto primeiro:
fonte
Eu usei:
Isso é tudo que você precisa fazer.
fonte
Isso irá garantir que o conteúdo seja salvo quando você perder o foco da área de texto
fonte
fonte
Você também pode simplesmente usar o plugin jQuery e o pacote para TinyMCE, ele resolve esses tipos de problemas.
fonte
Eu tive esse problema por um tempo e
triggerSave()
não funcionou, nem qualquer um dos outros métodos.Então, encontrei uma maneira que funcionou para mim (estou adicionando aqui porque outras pessoas podem já ter tentado o triggerSave e etc ...):
Quando você está enviando seu formulário ou o que quer que seja, tudo que você precisa fazer é pegar os dados do seu seletor (no meu caso
.tinymce
:) usando$('.tinymce').text()
.fonte
@eldar: Eu tive o mesmo problema com o 3.6.7 rodando no 'modo normal'; e nem triggerSave ou save () estavam funcionando.
Mudei para o plugin jQuery TinyMCE e sem fazer mais nada ele está funcionando agora. Estou assumindo que em algum lugar ao longo da linha eles implementaram algum tipo de triggerSave automático para a versão jQuery do TinyMCE.
fonte
tinyMCE.triggerSave()
na verdade, funciona bem para mim no modo normal. Mas você está correto ao dizer que já existe algum tipo de salvamento automático no modo jquery, o que contradiz tinymce.com/wiki.php/Plugin:autosave : "Este plug-in provavelmente será estendido no futuro para fornecer suporte ao salvamento automático AJAX."Acabei de ocultar () o tinymce e enviar o formulário, faltando o valor alterado de textarea. Então eu adicionei isto:
Funciona para mim.
fonte
tinyMCE.triggerSave();
parece ser a resposta correta, pois sincronizará as alterações do iframe com a área de texto.Para adicionar às outras respostas - por que você precisa disso? Eu estava usando o tinyMCE por um tempo e não tinha encontrado problemas com campos de formulário que não chegavam. Depois de alguma pesquisa, descobriu-se que era o "patching automático" dos envios de elementos do formulário, que está ativado por padrão - http://www.tinymce.com/wiki.php/Configuration3x:submit_patch
Basicamente, eles redefinem
submit
para chamar detriggerSave
antemão, mas apenas sesubmit
ainda não tiver sido redefinido por outra coisa:Então, se algo mais em seu código (ou outra biblioteca de terceiros) está bagunçando
submit
, seu "patching automático" não funcionará e será necessário chamartriggerSave
.EDIT: E, na verdade, no caso do OP,
submit
não está sendo chamado. Como é ajax, isso está contornando o "patch automático" descrito acima.fonte
Em primeiro lugar:
Você deve incluir o plugin tinymce jquery em sua página (jquery.tinymce.min.js)
Uma das formas mais simples e seguras é usar
getContent
esetContent
com triggerSave. Exemplo:fonte