2012-11-22 21 views
0

我有一个表格,看起来像这样AJAX调用没有得到触发上轨3

<%= 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

你'bind'应该工作。是部分形式吗? – mccannf

+0

是的,部分 –

回答

1

由于形式是局部的,你应该在主要 html.erb文件下面的JavaScript呈现部分:

$(document).on("ajax:beforeSend", "#suggestpopform", function() { 
     $("#suggestpop").html("Thanks a lot!"); 
}); 
1

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

放置此代码将是

应用正确的地方/资产/ Java脚本/ .js.coffee

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

AJAX:beforeSend

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

你的代码,在该文件中应该是这个样子:

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

希望这有助于