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がこのようにcreate.js.erbでajax:before(またはロード)の使用を開始したらすぐにフォームを非表示にしたいのです。

$("#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

フォームはパーシャルであるため、パーシャルをレンダリングするメインのhtml.erbファイルに次のJavaScriptが含まれている必要があります。

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

イベントは「#suggestpopform」ではなくドキュメントでトリガーされるため、特定のフォームではなくドキュメントにハンドルを接続する必要があります。

このコードを配置する適切な場所は

app / Assets / javascripts / .js.coffee

さらに、リクエストを送信する前にトリガーされるイベントの名前は次のとおりです。

ajax:beforeSend

これは、ごく最近変更されたため、ほとんどのチュートリアルやドキュメントに書かれているものとは異なります。

そのファイル内のコードは次のようになります。

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

お役に立てれば、

于 2012-12-24T15:10:35.743 に答える