我有一个看起来像这样的表格
<%= 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时使表单消失:使用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?
答案 0 :(得分:1)
由于表单是部分的,您应该在 main html.erb文件中使用以下javascript来呈现部分:
$(document).on("ajax:beforeSend", "#suggestpopform", function() {
$("#suggestpop").html("Thanks a lot!");
});
答案 1 :(得分:1)
事件是在文档上触发的,而不是在“#suggestpopform”中触发,因此您需要将句柄连接到文档,而不是特定的表单。
放置此代码的正确位置将在
中应用程序/资产/ Javascript角/ .js.coffee
此外,在发送请求之前触发的事件的名称是:
AJAX:beforeSend
这与大多数教程和文档中的内容不同,因为它最近才更改。
您的代码,在该文件中应该类似于:
$(document).ready(
->
$(document).on("ajax:beforeSend", (event)->
$(event.target).html("Thanks a lot!");
);
)
希望这有帮助,