slideToggle状态不适用于多个框

时间:2015-06-22 07:57:45

标签: javascript jquery cookies

我正在尝试使用Cookie保存可折叠框的切换状态。这是我的代码:

HTML:

<div class="box_container">
    <div class="box_handle">
        Title
    </div>
    <div class="box" data-title="admin_actions">
        Content
    </div>
</div>

使用Javascript:

$('div.box_container div.box_handle').click(function() {
    $(this).next('.box').slideToggle('fast');
});
$.each($('div.box_container div.box_handle'), function(index,value){
    if ($.cookie('show_box_' + $(value).next('.box').attr('data-title')) != 'closed'){
        $(value).next('.box[data-title="' + $('.box').attr('data-title') + '"]').hide();
    }
});
var new_value = "";
window.onbeforeunload = function() {
    $.each($('div.box_container div.box_handle'),function(index,value){
        new_value = ($(value).next('.box').css('display') == 'none') ? 'open' : 'closed';
        $.cookie('show_box_' + $(value).next('.box').attr('data-title'), new_value);
    });
}

现在,我的问题是:

除第一个之外的任何方框总是会打开。它确实为它设置了一个cookie,但如果cookie设置为closed则不会隐藏它只对它工作的页面上的每个第一个框。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

使用javascript的onbeforeunload功能

 window.onbeforeunload = function() {
      //Declare cookie to close state
 }

每次页面刷新时都会调用此函数

更新

要循环遍历每个值,请以这种方式使用此$.each

var new_value = "";
window.onbeforeunload = function() {
 $.each($('div.box_container div.box_handle'),function(index,value){
  new_value = ($(value).next('.box').css('display') == 'none') ? 'collapsed' : 'expanded';
  $.cookie('show_box' + '_' + $(value).next('.box').attr('data-title'), new_value);
 })
}

更新II:

这样做,它应该工作

window.onload = checkCon;
function checkCon(){
 $.each($('div.box_container div.box_handle'),function(index,value){
  if ($.cookie('show_box' + '_' + $(value).next('.box').attr('data-title')) != 'expanded'){
   $(value).next('.box[data-title="' + $(value).next('.box').attr('data-title') + '"]').hide();
  }
 })
}