使用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不会让我。