小编典典

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

ajax

我有的:

我有一个通过AJAX提交的表格。

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

我想要的是:

我想防止重复提交。由于仅在成功完成请求后该表单才会消失,因此只要数据库尚未完成数据写入,用户就可以单击“提交”按钮。显然,我不需要。

我尝试过的

我尝试将其添加到“提交”按钮本身中,但是它不起作用。该按钮被禁用,但是没有数据发送。

:onclick => "this.disabled = true"

我也尝试将点击处理程序添加到“提交”按钮。具有与以前相同的效果。实际上没有数据发送到控制器,但是按钮已禁用。

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

也尝试了同样的方法,没有返回false。禁用按钮后没有任何反应。

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

我开始认为这是特定于Rails的东西?


阅读 190

收藏
2020-07-26

共1个答案

小编典典

disable_with在Rails 3及更高版本的视图中尝试如下所示:

<%= f.submit "Save annotation", :data => {:disable_with => "Saving..."}, ... %>

对于Rails 2:

<%= f.submit "Save annotation", :disable_with => "Saving...", ... %>
2020-07-26