2011-10-03 71 views
0

我试图在可折叠垂直列表上设置Cookie,我使用.toggle()隐藏并显示列表和jQuery Cookie Plugin。我有非常简单的导航这样的:使用.toggle()设置可折叠jQuery菜单的Cookie

<ul class="menu-sidebar"> 
    <li>Item 1</li> 
    <li><a href="#">Item 2</a> 
    <ul> 
     <li>Item 2.1</li> 
    </ul> 
    </li> 
    <li><a href="#">Item 3</a> 
    <ul> 
     <li>Item 3.1</li> 
    </ul> 
</li> 
<li>Item 4</li> 
</ul> 

有了下面的CSS:

.js .menu-sidebar li ul{display:none;} 

然后我切换列表如下:

jQuery(document).ready(function(){ 
    $('.menu-sidebar li:has(ul) a').click(function(){ 
    $(this).next().toggle(); 
    }); 
}); 

它的简单和伟大工程,但我可以”我真的不知道如何在这方面选择饼干。我一直想这样做:

$('.menu-sidebar li:has(ul) a').click(function(){ 
    $(this).next().toggle(); 

    if ($(this).next().is(':visible')){ 
    $.cookie('verticalNav', 'expanded'); 
    } 

    if ($(this).next().is(':hidden')){ 
    $.cookie('verticalNav', 'collapsed'); 
    } 

    var verticalNav = $.cookie('verticalNav'); 
    if (verticalNav == 'expanded'){ 
    $(this).next().show(); 
    } 
}); 

没有运气。有小费吗?谢谢! :)

+0

令人惊叹的剧本!我怎样才能用它与子分支?例如:1
1.1
1.1.1
1.2 – 2012-08-29 14:44:39

回答

0

取出click()方法的最后一个块。它内部是多余的。 (而且,当然,它包全部$(document).ready(function() {...});块内。)

UPDATE:此代码将通过分配不同的Cookie值到每一个与多个子​​菜单工作。 http://jsfiddle.net/GDudf/13/

$('.menu-sidebar li:has(ul) a').click(function() { 
    $(this).next().toggle(); 
    if ($(this).next().is(':visible')) { 
     $.cookie($(this).text(), 'expanded'); 
    } 

    if ($(this).next().is(':hidden')) { 
     $.cookie($(this).text(), 'collapsed'); 
    } 
}); 

$('.menu-sidebar > li').each(function() { 
    var verticalNav = $.cookie($(this).children('a').text()); 
    if (verticalNav == 'expanded') { 
     $(this).find('ul').show(); 
    } 
}); 
+0

但是我在里面使用'this'。它不能在功能之外,或者它可以...我做了这个http://jsfiddle.net/GDudf/8/ –

+0

jsfiddle我不好,你说得对。答案已更新。 – Blazemonger

+0

感谢您的回复!但它似乎并不奏效。更新小提琴http://jsfiddle.net/GDudf/9/ –