Rails 3: Как запустить отправку формы через javascript?

У меня есть форма, которая по большей части просто отправляет как нормальную форму, поэтому я не хочу устанавливать в form_tag параметр :remote => true.

однако при определенных обстоятельствах я хотел бы, чтобы функция javascript опубликовала форму, как если бы она была опубликована :remote => true. Что мне нужно сделать в javascript для этого?

5 ответов


Я просто попробовал это, что определенно работает, если форма имеет remote = > true, просто удалите атрибут data-remote, чтобы отправить обычно w / javascript ie

$('input').click(function(){ $('#form').removeAttr('data-remote') });

Я предполагаю, что противоположное, вероятно, будет работать ie, если форма не имеет remote = > true, просто сделайте

$('input').click(function(){ $('#form').attr('data-remote',true)});

Я вроде как новичок в этом, но здесь идет...

рельсы.js (по крайней мере, jquery) определяет следующую функцию для захвата и отправки форм:

$('form').live('submit.rails', function(e) { ... });

Если вы используете следующее, он должен вызвать ту же функцию (и если: remote = > true, то это не вызовет перезагрузку страницы):

$("#<yourformid>").trigger("submit.rails");

Итак, если вы хотите отправить свою форму на изменение выбора, например, вы можете установить вышеуказанный вызов триггера на select's :onchange, я бы предположил.


может быть, вы могли бы попробовать это:

$('#form').submit();

Если вы используете jQuery, вы можете сделать что-то вроде этого, чтобы иметь форму auto-post на событиях keyup или упростить ее для запуска Вручную:

  $(function() {    
    $("#live_search input").keyup(function() {
        q = $('#search_text').val();
      $.ajax({
          beforeSend      : function(request) { request.setRequestHeader("Accept", "text/javascript"); },
                           // Included so Rails responds via "format.js"
          data          : 'query=' + q,
          success       : function(data, textStatus, XMLHttpRequest) {
                                // alert(textStatus);
                                $("#live_search #results").html(data);
                                },
          error         : function(XMLHttpRequest, textStatus, errorThrown) {
                                // alert(errorThrown);
                                $('#annotation_dialog').html(XMLHttpRequest.responseText);
                                },
          type            : 'POST',
          url                 : '/search/live'
      });
      return false;
    });
});

в Rails 5 (который заменяет jquery-ujs rails-ujs), вот как вы запускаете обработчик rails, прикрепленный к форме submit событие:

var elem = document.getElementById('myform') // or $('#myform')[0] with jQuery
Rails.fire(elem, 'submit');

(Святая корова, мне потребовалась вечность, чтобы понять это!)