防止在Rails AJAX表单中提交双重提交

slh*_*hck 8 ajax jquery ruby-on-rails submit ruby-on-rails-3

是)我有的:

我有一个表格,我通过AJAX提交.

<%= form_for([@map, @annotation], :remote => true ) do |f| %>
   ...
   <%= f.submit "Save annotation", :class => "btn btn-primary", :id => "annotation-submit-button" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

我想要的是:

我想防止双重提交.由于表单仅在请求成功完成后消失,因此只要数据库尚未完成数据写入,用户就可以单击"提交"按钮.显然,我不希望这样.

我尝试过的:

我尝试将此添加到提交按钮本身 - 但它不起作用.该按钮被禁用,但没有数据被发送.

:onclick => "this.disabled = true"
Run Code Online (Sandbox Code Playgroud)

我还尝试在提交按钮中添加一个点击处理程序.这与以前具有相同的效果.实际上没有数据发送到控制器,但是按钮被禁用.

$("#annotation-submit-button").click(function(event) {
  $(this).attr("disabled", "disabled");
  return false;
});
Run Code Online (Sandbox Code Playgroud)

也尝试了同样没有返回false.禁用该按钮后没有任何反应.

$("#annotation-submit-button").click(function(event) {
  $(this).prop("disabled", "disabled");
});
Run Code Online (Sandbox Code Playgroud)

我开始认为这是Rails特有的?

abh*_*has 19

disable_with在Rails 3及更高版本中尝试这样的视图:

<%= f.submit "Save annotation", :data => {:disable_with => "Saving..."}, ... %>
Run Code Online (Sandbox Code Playgroud)

对于Rails 2:

<%= f.submit "Save annotation", :disable_with => "Saving...", ... %>
Run Code Online (Sandbox Code Playgroud)

  • 对我的 ajax 请求不起作用,单击提交按钮时没有任何反应,但对正常请求效果很好 (2认同)