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

Rails3:如何通过javascript触发表单提交?,javascript,ruby-on-rails-3,Javascript,Ruby On Rails 3,我有一个表单,它在大多数情况下只是作为普通表单提交,所以我不想在form_标记中设置:remote=>true选项 但是,在某些情况下,我希望能够让javascript函数发布表单,就像它是由:remote=>true发布的一样。我需要在javascript中做些什么来实现这一点?如果您使用jQuery,您可以这样做,让表单在keyup事件上自动发布,或者将其简化为手动触发: $(function() { $("#live_search input").keyup(funct

我有一个表单,它在大多数情况下只是作为普通表单提交,所以我不想在form_标记中设置:remote=>true选项


但是,在某些情况下,我希望能够让javascript函数发布表单,就像它是由:remote=>true发布的一样。我需要在javascript中做些什么来实现这一点?

如果您使用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;
    });
});

也许你可以试试这个:

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

我对这有点陌生,但现在

js jquery one至少定义了以下函数来捕获和提交表单:

$('form').live('submit.rails', function(e) { ... });
如果使用以下命令,则应触发相同的函数,如果:remote=>true,则不会导致页面重新加载:

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

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

我刚刚尝试了这个方法,它确实有效,如果表单的remote=>true,只需删除data remote属性即可正常提交w/javascript ie

$('input').click(function(){ $('#form').removeAttr('data-remote') });
我猜如果表单没有remote=>true,则可能会出现相反的情况

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

在用Rails ujs替换jquery ujs的Rails 5中,以下是如何触发处理程序Rails附加到表单的提交事件:

var elem=document.getElementById'myform'//或带有jQuery的$'myform'[0] Rails.firelem,“提交”;
天哪,我花了很长时间才弄明白

这将正常提交表单,而不会触发format.js。这就是我在研究如何使用javascriptI触发rails远程表单提交的答案。我做到了这一点,但它仍然从控制器而不是js请求HTML,因此我的respond_to do | format | format.js;end给出了一个错误。我尝试了这个,我的表单仍然是传统的提交方式,而不是远程提交。这是因为我使用的是Rails 5吗?这里有框架更新吗?是的,Rails 5.1用新的Rails ujs库取代了jquery ujs。请参阅Rails 5.1+的新答案: