Не отсылает данные если используем textarea

Added by Alex Godinev almost 2 years ago

Столкнулся с тем, что если создаем редактор для textarea, то данные не отсылаются на сервер при отправке формы. Заменил на div - все отправилось. Может, конечно, у меня какие глюки, но вот так. Цитата из дока:
#our-element - id элемента, на котором будет создан редактор, может быть textarea или любым HTML элементом, содержащем текст (будет заменен на textarea перед отправкой формы)


Replies (13)

RE: Не отсылает данные если используем textarea - Added by Troex Nevelin almost 2 years ago

Проблема оказалось в том что для textarea необходим параметр name иначе получается у элемента нет имени в POST запросе #189.
Уже исправлено.

RE: Не отсылает данные если используем textarea - Added by Art Z over 1 year ago

Я не особо понимаю в JS, так что прошу помощи )

Есть форма редактирования (создания) новостей.

<form name="edit_news" ....>

Есть textarea на которой прикручен elrte

<textarea id="editor" type="text" name="description" class="large">(данные из базы)</textarea>

Есть кнопка submit при нажатии на которую нужно отправить данные в базу

<input type="submit" name="edit_news" value="Update News" class="button">

</form>

Так вот вопрос. Как мне заставить elrte передать данные в textarea (name="description")?

Я полистал форум, попробовал $('selector').elrte('updateSource');
Но что-то у меня не получается ничего.

Если не сложно объясните на моем примере куда вставлять $('selector').elrte('updateSource');, что должно быть на месте 'selector', как обойтись без кнопки "save"?

Заранее спасибо!

RE: Не отсылает данные если используем textarea - Added by Troex Nevelin over 1 year ago

Если у вас нет скриптов которые перехватывают событие submit вашей формы то данные должны отправляться на сервер в переменной POST description, если же у вас есть скрипт, который срабатывает на submit тогда в этот скрипт вам нужно добавить $('#editor').elrte('updateSource'); (конретно для вашего случая)

RE: Не отсылает данные если используем textarea - Added by Art Z over 1 year ago

Troex Nevelin wrote:

Если у вас нет скриптов которые перехватывают событие submit вашей формы то данные должны отправляться на сервер в переменной POST description, если же у вас есть скрипт, который срабатывает на submit тогда в этот скрипт вам нужно добавить $('#editor').elrte('updateSource'); (конретно для вашего случая)

Спасибо Вам за скорейший ответ!

Нет, у меня после нажатия submit все данные уходят в php файл, после чего идут в базу. Но именно поле description остается неизменным, как до редактирования. А js скриптов на submit у меня нет. И вот поэтому я и не пойму куда нужно добавить "$('#editor').elrte('updateSource');"? в событие onclick? или после создания редактора

// create editor
$('#editor').elrte(opts);
$('#editor').elrte('updateSource'); 
// or this way
//var editor = new elRTE(document.getElementById('editor'), opts);

Т.е. как мне заставить редактор отдать полученный текст в поле textarea name="description" и не пользуясь при этом кнопкой "save"?
Пол дня мозг ломаю, и никак до меня не доходит =))) Извините что отвлекаю по мелочам, но очень нужен хелп ))

RE: Не отсылает данные если используем textarea - Added by Troex Nevelin over 1 year ago

попробуйте добавить код после инициализации elrte:

$('form[name="edit_news"]').submit(function() {
  $('#editor').elrte('updateSource');
});

RE: Не отсылает данные если используем textarea - Added by Art Z over 1 year ago

Не работает. После того как нажимаю submit, в поле остается тот же текст что и до редактирования (((
Я точно делаю что-то не так. Сейчас по порядку выложу как я все делаю:

Между тегами <head>

    <script type="text/javascript" charset="utf-8">
      $(document).ready(function() {
              elRTE.prototype.options.panels.web2pyPanel = [
            'bold', 'italic', 'underline', 'forecolor', 'justifyleft', 'justifyright',
            'justifycenter', 'justifyfull', 'formatblock', 'insertorderedlist', 'insertunorderedlist',
            'link', 'image', 'flash' ];
            elRTE.prototype.options.toolbars.web2pyToolbar = ['web2pyPanel', 'tables'];

          var opts = {
                toolbar  : 'web2pyToolbar',
                          cssClass : 'el-rte',
              lang         : 'en',   // set your language
                          height       : 200,
              cssfiles : ['http://www.xxx.com/js/elrte/css/elrte-inner.css'],
              fmOpen : function(callback) {
                    $('<div id="myelfinder" />').elfinder({
                        url : 'http://www.xxx.com/js/elfinder/connectors/php/connector.php',
                        lang : 'en',
                        dialog : { width : 900, modal : true, title : 'elFinder - file manager for web' },
                        closeOnEditorCallback : true,
                        editorCallback : callback
                    })
                }
          };
          // create editor
          $('#editor').elrte(opts);

        $('form[name="edit_news"]').submit(function() {
          $('#editor').elrte('updateSource');
        });
         // or this way
          //var editor = new elRTE(document.getElementById('editor'), opts);
      });
    </script>

</head>

Далее в теле идет форма:

        <form name="edit_news" method="POST" enctype="multipart/form-data" action="news.php?m=edit&NID={$news[0].NID}">
        <fieldset>
            ....
            <label for="description">Description: </label>
            <textarea id="editor" type="text" name="description" class="large">{$news[0].description}</textarea><br>
            ....
        <div style="text-align: center;">
            <input type="submit" name="edit_news" value="Update News" class="button">
            <input type="button" name="cancel" value="Cancel" class="button" onClick="window.location='news.php'">
        </div>
        </form>

Вроде все как надо. Но не работает (((

RE: Не отсылает данные если используем textarea - Added by Troex Nevelin over 1 year ago

Сделайте в news.php var_dump($_POST); чтобы точно посмотреть какие данные отсылаются, так же убедитесь что у вас последня версия elRTE 1.2.

Так же рекомендую <textarea id="editor"... заменить id на description, так же $('#editor').elrte(opts); на $('#description').elrte(opts);

Так же смотрите что вам пишет FireBug в консоль, может у вас какие конфликты имеются.

RE: Не отсылает данные если используем textarea - Added by Art Z over 1 year ago

Спасибо Troex Nevelin!

Действительно были конфликты. А точнее неправильно назвал переменные, которые сходились с функциями mysql. Так что пойду выпрямлять руки ))

Еще раз большое спасибо )) Будем юзать Ваш редактор ))

RE: Не отсылает данные если используем textarea - Added by Yermashov Wasiliy about 1 year ago

А как сделать так, чтобы событие $('#editor').elrte('updateSource'); происходило для всех загруженных редакторах на странице?
При этом их количество может варьироваться, и имена #editor зараннее не известны ?

RE: Не отсылает данные если используем textarea - Added by Dmitry Levashov about 1 year ago

Искать их вручную

$('*').each(function() {
  this.elrte !== void(0) && $(this).elrte('updateSource')
})

Если все редакторы создаются на текстареа или дивах - можно оптимизировать селектор $('textarea,div')

RE: Не отсылает данные если используем textarea - Added by Yermashov Wasiliy about 1 year ago

т.е. можно попробовать сделать так:

$('textarea').each(function(){this.elrte !== void(0) && $(this).elrte('updateSource')})

???

RE: Не отсылает данные если используем textarea - Added by Yermashov Wasiliy about 1 year ago

Сначала все работало отлично на вот таком коде

function submit_form(form)
{
$('form[name="'+form+'"]').find('.editor').elrte('updateSource');
$('form[name="'+form+'"]').submit();
}

А через время стал давать ошибку:

[15:06:13.579] uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMNSHTMLDocument.execCommand]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: http://***.com/elrte/js/elrte.min.js :: <TOP_LEVEL> :: line 34" data: no]

файлы все на местах, и не менялись

(1-13/13)