我正在尝试使用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
则不会隐藏它只对它工作的页面上的每个第一个框。我该如何解决这个问题?
答案 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();
}
})
}