2016-07-26 15 views
0

私はajaxレスポンスによって生成されるフラッシュメッセージを持っています。私のコントローラで 私が持っている:Rails、ajax経由で生成されたフラッシュメッセージを削除する

フラッシュメッセージを示している部分をレンダリングdestroy.js.erbファイル

$('#flash_messages').html("<%= escape_javascript (render partial: 'layouts/flash_messages') %>"); 

を呼び出し

def destroy 
    flash[:danger] = "Successfuly destroyed" 
    format.js 
end 

。このようにこの部分的なルックス:

#flash_messages 
    -flash.each do |key, value| 
    = content_tag(:div, value, class: "flash alert alert-#{key}") 

は、私が2秒後にフラッシュメッセージを削除するためにjqueryのを使用したいと思います。私が試したことだった。それは、ページの読み込み後に生成されるため、

$(".alert").fadeTo(2000, 500).slideUp(500, function(){ 
    $(".alert").alert('close'); 
}); 

た、しかし、.alertクラスを見つけることができません。この問題の回避策は何ですか?ありがとうございました!

+0

Jqueryコードを 'destroy.js.erb'ファイルに書くことができます。そして、それは動作します。 –

+0

これは、そのトリックを行いました。答えとして追加して、Acceptedとマークすることができます。ありがとうございました。($# 'flash_messages'の後に追加する必要があるJqueryコードです。 ! –

+0

あなたのコードを実行する他の方法もあります。Ajaxが完了したときにコードを実行するのと同じように、 'success'コールバックから実行します。その場合、JSをdestroy.js.erbの中に入れる必要はありません。それはうまくいく。 –

答えて

-1

<div class='alert'..のような実際のDOMが存在しない場合、JSがページに読み込まれました。だから結束は起こらなかった。これを解決するには、ファイルをレンダリングするロジックの後に、destory.js.erbファイル内にJSコードを挿入します。別の方法は、特定の要素に対するAjaxコールのsuccessコールバックからJSコードを実行することです。

関連する問題