使用javascript提交rails远程表单

在我的rails应用程序中,我有一个看起来像这样的远程表单:

 :get, :id => 'my-form', :remote => true do %>  'search-field' %>   

现在我想通过javascript提交此表单并触发所有rails远程表单回调。 到目前为止,我已经尝试了一些东西,但似乎没有任何工作。

我尝试过的事情:

 $('#my-form').trigger('onsubmit') $.rails.callFormSubmitBindings( $('#search-form') ) 

但到目前为止没有运气。 有任何想法吗?

你可以使用.submit();

 $("#my-form").submit(); 

这只是以Rails方式:

  $("#myform").trigger('submit.rails'); 

在Rails 5.1+中,用非jquery rails-ujs替换旧的jquery-ujs ,上面的答案不再rails-ujs ,总是通过HTML HTTP请求提交表单。 这是您触发新rails提交事件处理程序的方法:

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

(不能告诉你我花了多长时间才弄明白……)出于某种原因,常规事件没有正确地冒充到rails使用rails的新委托函数 附加的委托事件处理程序,当他们由jQuery触发。

如何从控制器传递json并通过js捕获它。

现在,控制器的行动为

 respond_to do |format| if some condition format.json { render :json => {:success => true} } format.html{ redirect_to some_path, :notice => "successfully created" } else ... end end 

并将js中的json捕获为

 $('#my-form').bind 'ajax:success', (event,data) -> if(data.success == true) ... 

不完全是你想要的,但希望这对你有所帮助。

如何使用rails_ujs并简单地执行以下操作:

Rails.fire(form, 'submit');

这感觉就像一个正确的Rails方式来做到这一点。

你可以在这里找出来源 – https://github.com/rails/rails/blob/master/actionview/app/assets/javascripts/rails-ujs/utils/event.coffee#L34

@mltsy回答对我来说非常适合。 但是,想重申这需要使用rails-ujs。 如果您从像我这样的旧版本升级,您可能仍在使用依赖于jquery的jquery_ujs。 如果您正在获取ReferenceError: Can't find variable: Rails在控制台中ReferenceError: Can't find variable: Rails ,请检查您的application.js并确保您拥有rails-ujs或@ mltsy的好答案将无效。 我想留下评论而不是回答,但Stack不会让我。