как я могу добавить данные в html-форму при отправке (автосохранение) с помощью jQuery?

У меня есть форма, которую я отправляю с помощью jQuery, чтобы автоматически сохранить ее. Это в Ruby On Rails 3. Моя модель — это сообщение, которое я хочу автоматически сохранить. Пост-модель адаптирована для игнорирования определенных проверок, если логическое поле (черновик) = true. (Если черновик равен нулю, выполняется проверка)

Я использую следующий код для периодической отправки формы для ее автоматического сохранения.

 $(document).ready(function() {
   setInterval(function() {
     $('#post_form form[data-remote]').submit();
   }, 1000*60); // 1000ms * 60s = 1m
 });

Когда форма отправляется с помощью этой функции, я хочу каким-то образом включить переменную :draft => true, чтобы игнорировать проверки и т. д. Как я могу добавить этот javascript для достижения этой цели? Или это просто невозможно?

Если мне придется перейти к коду рельсов и сделать другое решение, пожалуйста, прокомментируйте, чтобы сообщить мне, и я опубликую соответствующий код.

Спасибо, парни!


person jay    schedule 10.10.2011    source источник


Ответы (2)


$(document).ready(function() {
   setInterval(function() {
     var draft = $('#draft');
     if(draft == null)
     {
        $('post_form').append('<input type="hidden" name="draft" id="draft" value="true" />');
       draft = $('#draft');
     }
     draft.val('true');


     $('#post_form form[data-remote]').submit();
   }, 1000*60); // 1000ms * 60s = 1m
 });

Я обновил ваш код, я создал скрытое текстовое поле ввода со значением true и черновиком имени.

надеюсь, это поможет

person Senad Meškin    schedule 10.10.2011

Прежде всего, $('#post_form form[data-remote]').submit() выполнит полную отправку, и пользователь будет отправлен на страницу action. То, что вы хотите сделать, это сообщение AJAX.

Во-вторых, вы не хотите снова проходить DOM каждую минуту (каждый раз, когда вы отправляете сообщение). Вы должны кэшировать форму в переменной, чтобы вы могли повторно использовать ее позже.

Вот как вы это сделаете:

$(document).ready(function() {

   var $form = $('#post_form form[data-remote]'),
       href = $form.attr('href');

   setInterval(function() {
      $.post(href, $form.serialize() + '&draft=true');
   }, 60000);

});
person Joseph Silber    schedule 10.10.2011