查看
= form_tag foo_path, method: :get, class: 'form-inline', role: 'form', remote: true do
.form-group
= select_tag :year, options_for_select(@years, Date.today.year), class: 'form-control', prompt: 'Year'
.form-group
= select_tag :bar, options_for_select(@bars), prompt: 'Bar', class: 'form-control', disabled: true
%br
.form-group
= submit_tag 'Submit', class: 'btn btn-default'
控制器
def foo
respond_to do |format|
format.js { render layout: false }
end
end
所以我有一个表单,它是一系列标签div中的第一个。您提交表单,提出请求,隐藏表单,并显示下一个选项卡以及表单提交中的ajax'd信息。
如果需要,我想允许用户返回表单并更新它。我的问题是,我似乎无法多次提交表单。我不确定这是一个UJS问题,还是一个turbolinks问题(虽然我禁用了turbolinks但仍有问题)。我还需要添加render layout: false
位,这是我过去从未做过的......这是rails 4.1.4。
我可以在控制台中看到正在发出请求,并且正在呈现适当的js。 (这是实际的反应,而不是我的假foo例子)
Started GET "/vehicles/query?utf8=%E2%9C%93&year=2014&mileage=&condition=&commit=Get+a+Quote" for 127.0.0.1 at 2014-08-23 18:24:13 -0700
Processing by VehiclesController#query as JS
Parameters: {"utf8"=>"✓", "year"=>"2014", "mileage"=>"", "condition"=>"", "commit"=>"Get a Quote"}
Rendered vehicles/query.js.erb (0.0ms)
Completed 200 OK in 3ms (Views: 1.3ms | ActiveRecord: 0.0ms)
答案 0 :(得分:0)
尝试在此过程中禁用提交按钮,执行此操作的轨道方式是:
submit_tag "Submit", data: { disable_with: "Please wait..." }
答案 1 :(得分:0)
从我所看到的,你将有两个潜在的问题:
- 您的Javascript不会抓住下一个“提交”
- 如果 捕获提交,则不会发送
醇>
我会首先确保我的Javascript在两种情况下捕获submit
事件。这显然适用于第一次拍摄,但下一次没有:
-
<强> JS 强>
因此我会删除remote: true
属性,并尝试手动ajax方法,绑定到document
&amp;委派:
#app/assets/javascripts/application.rb
$(document).on("submit", "form-inline", function() {
$.ajax({
url: $(this).attr("action"),
data: $(this).serialize();
success: function(data) {
// do something here
};
});
});
因为它绑定到文档,所以每次执行查找时都应该不受惩罚。您需要阅读javascript delegation以了解其工作原理
-
<强>控制器强>
如果你的JS正在通过,也许javascript不会在另一端触发。
如果是这种情况,您基本上会得到它将提交您的请求,但控制器将不会执行任何使其工作所需的“后端”工作。
要解决这个问题,我会将后端.js.erb
功能移到$.ajax({success:
函数中,这样它肯定会将每个请求视为个体,因此每次都可以呈现它