jQuery и TinyMCE: значение textarea не отправляется - PullRequest
96 голосов
/ 23 января 2010

Я использую 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]",
});

Можете ли вы объяснить мне, что я должен изменить и почему, чтобы получить значение в текстовой области?

Ответы [ 14 ]

1 голос
/ 24 января 2010

Вы также можете просто использовать плагин jQuery и пакет для TinyMCE, он решает подобные проблемы.

0 голосов
/ 03 декабря 2015

Прежде всего:

  1. Вы должны включить плагин tinymce jquery на своей странице (jquery.tinymce.min.js)

  2. Один из самых простых и безопасных способов - использовать getContent и setContent с triggerSave. Пример:

    tinyMCE.get('editor_id').setContent(tinyMCE.get('editor_id').getContent()+_newdata);
    tinyMCE.triggerSave();
    
0 голосов
/ 01 октября 2015

tinyMCE.triggerSave(); представляется правильным ответом, поскольку он синхронизирует изменения от iFrame до вашей текстовой области.

Чтобы добавить к другим ответам, хотя - зачем вам это нужно? Я использовал tinyMCE некоторое время и не сталкивался с проблемами с полями формы, не проходящими через. После некоторых исследований выяснилось, что это «автоматическое исправление» отправляемых элементов формы, которое по умолчанию включено - http://www.tinymce.com/wiki.php/Configuration3x:submit_patch

Обычно они переопределяют submit для вызова triggerSave заранее, но только если submit еще не был переопределен чем-то другим:

if (!n.submit.nodeType && !n.submit.length) {
    t.formElement = n;
    n._mceOldSubmit = n.submit;
    n.submit = function() {
        // Save all instances
        tinymce.triggerSave();
        t.isNotDirty = 1;

        return t.formElement._mceOldSubmit(t.formElement);
    };
}

Итак, если что-то еще в вашем коде (или другой сторонней библиотеке) работает с submit, их «автоматическое исправление» не будет работать, и возникает необходимость вызвать triggerSave.

РЕДАКТИРОВАТЬ: И на самом деле в случае ОП, submit не вызывается вообще. Так как это ajax'd, это обходит "автоматическое исправление", описанное выше.

0 голосов
/ 10 марта 2014

Я просто скрываю () tinymce и отправляю форму, измененное значение textarea отсутствует. Поэтому я добавил это:

$("textarea[id='id_answer']").change(function(){
    var editor_id = $(this).attr('id');
    var editor = tinymce.get(editor_id);
    editor.setContent($(this).val()).save();
});

Это работает для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...