0

我有一个看起来像这样的表格

<%= form_tag(suggestions_path, :remote => true, :id=>"suggestpopform") do %>
 <p>
   Subject:<br />
   <%= text_field_tag "subject" %>
 </p>

 <p>
   Feedback or suggestion on anything:<br />
   <%= text_area_tag "description", "", :size=>"50x20" %>
 </p>

 <p>
   <%= submit_tag 'Submit' %>
 </p>
<% end %>

这导致调用 create.js.erb

但是,由于创建操作发送电子邮件,因此存在延迟。所以我想让表单在 ajax 开始使用 ajax:before (或加载)和 create.js.erb 时立即消失

$("#suggestpopform").bind("ajax:before",function() {
    $("#suggestpop").html("Thanks a lot!");
});

但无论我尝试什么,都没有任何反应。

但是,如果我在 create.js.erb 中只有$("#suggestpop").html("Thanks a lot!");它可以正常工作。

如何使用 ajax:before 或 ajax:loading?

4

2 回答 2

1

事件在文档上触发,而不是在“#suggestpopform”中触发,因此您需要将句柄连接到文档,而不是特定表单。

放置此代码的正确位置将在

应用程序/资产/javascripts/.js.coffee

此外,在发送请求之前触发的事件名称是:

ajax:发送前

这与大多数教程和文档中的内容不同,因为它最近发生了变化。

您的代码在该文件中应类似于:

$(document).ready(
            -> 
                $(document).on("ajax:beforeSend", (event)->
                    $(event.target).html("Thanks a lot!");
                );
)

希望这可以帮助,

于 2012-12-24T15:10:35.743 回答
1

由于表单是部分的,您应该在呈现部分的主html.erb 文件中包含以下 javascript:

$(document).on("ajax:beforeSend", "#suggestpopform", function() {
      $("#suggestpop").html("Thanks a lot!");
});
于 2012-11-22T17:05:53.637 回答