フォームで検索するページのjQueryの仕掛けを維持したい

search.html.erbとかでFormがあって、submit_tagとかよくある。
このページの中にtoggleを使って表示させているお知らせがある。でも、これってsubmitしたときにtoggleの状態を維持してくれないので非表示にしていても表示されてしまう。

# search.html.erb
<div id="toggle">表示切替</div>
<div id="toggle_target" class="noprint">表示したり隠したり</div>
/*
app/assets/javascripts/hoge.js
*/
$(document).ready(function(){
 $('#toggle').click(function(){
  //$("#toggle_target").toggle( 'blind', '', 'first' );
 });
});

こんなときはRailsでなんとかしないでcookieで何とかしてみる。

たいさく

jquery-cookieを召喚

/*
app/views/layouts/application.html.erb
https://github.com/carhartl/jquery-cookie
*/
<head>
<script src="http://cdn.jsdelivr.net/jquery.cookie/1.4.0/jquery.cookie.min.js"></script>
</head>

jsファイル

/*
app/assets/javascripts/hoge.js
*/
$(document).ready(function(){
 $('#toggle').click(function(){
  if($("#toggle_target").css("display")=="block"){
   $("#toggle_target:not(:animated)").slideUp("first");
   $.cookie("toggle_display", "none");
  }else{
   $("#toggle_target").slideDown("first");
   $.cookie("toggle_display", "block");
  };
 });
});

jQuery.event.add(window, "load", function(){
 toggle_cookie();
});

/* cookieの状態で隠す */
function toggle_cookie(){
 if ($.cookie("toggle_display")=="none"){
  $("#toggle_target").hide();
 }
}

ここまで出来るとrailsでも仕込みたい

# hoge_controller.rb
def create
…
 cookies[:toggle_display]="none"
 redirect_to :action=>:search
…
end

参考