Rails 3:如何通过javascript触发表单提交?

时间:2011-02-04 23:59:42

标签: javascript ruby-on-rails-3

我有一个表单,大部分只是作为普通表单提交,所以我不想在form_tag中设置:remote =>真实的选择。

然而,在某些情况下,我希望能够在表单上发布javascript函数,就好像它已发布者:remote =>真正。我需要在javascript中做些什么来完成这个?

5 个答案:

答案 0 :(得分:33)

我对此并不熟悉,但这里有......

rails.js(至少是jquery)定义了以下函数来捕获和提交表单:

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

如果您使用以下内容,它应该触发相同的功能(如果:remote => true,那么它不会导致页面重新加载):

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

因此,如果您想在选择更改中提交表单,您可以将上述触发器调用设置为我想象的选择:onchange。

答案 1 :(得分:5)

我刚试过这个肯定有效,如果表单有远程=&gt;是的,只需删除数据远程属性即可正常提交w / javascript即

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

我猜相反的可能会起作用,即如果表单没有remote =&gt;这是真的

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

答案 2 :(得分:3)

也许你可以试试这个:

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

答案 3 :(得分:2)

如果您正在使用jQuery,您可以执行类似这样的操作,使表单自动发布在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;
    });
});

答案 4 :(得分:1)

在Rails 5中(使用rails-ujs替换jquery-ujs),这就是触发处理程序rails附加到表单submit事件的方式:

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

(圣牛确实让我永远想出来了!)