2017-07-27 162 views
0

我很难做到这一点,以便登录用户隐藏菜单的某个部分,以便在会话期间保持这种状态。在页面刷新时保持列表切换状态

$(document).ready(function() { 
    $('h1.tree-toggler').click(function() { 
    $(this).parent().children('ul.tree').toggle(300); 
    }); 
}); 

有了这个HTML:

<div> 
    <h1 class="tree-toggler">Heading</h1> 
    <ul class="tree"> 
    <a href="#"><li>Link 1</li></a> 
    <a href="#"><li>Link 2</li></a> 
    <a href="#"><li>Link 3</li></a> 
    <a href="#"><li>Link 4</li></a> 
    <a href="#"><li>Link 5</li></a> 
    </ul> 
</div> 

拨动完美的作品,但是当你改变页面不留喜欢它。

如何让它保持在下一页的切换方式?

+0

您可以在状态存储在服务器端的会话或使用cookies或客户端[本地存储/会话存储](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) – Quagaar

回答

0

您可以按照链接:How to get JS variable to retain value after page refresh?

您还可以使用下面的代码为你的目的:

$(document).ready(function() { 
    if(localStorage.getItem("toggleState") == "1") 
    $('ul.tree').hide(); 

    $('h1.tree-toggler').click(function() { 
    var ts = localStorage.getItem("toggleState"); 
    if(ts == null || ts == "0") { 
      var tv = "1"; 
      localStorage.setItem("toggleState", tv); 
     }else { 
     var tv = "0"; 
      localStorage.setItem("toggleState", tv); 
    } 
    $(this).parent().children('ul.tree').toggle(300); 
    }); 
}); 
+0

如果我想这样做,我是否需要单独标识每个ul列表,如果只隐藏一个,只隐藏一个列表。因为你的代码自动隐藏了我所有的ul,即使我只隐藏了一个。 – Searle

+0

您可以为每个ul使用个人ID。另一种方法是使用元素的索引号。但是实施它也不会很简单。 –

0

您可以使用localStorage API来保存本地数据。

$(document).ready(function() { 

    let storage = localStorage || sessionStorage; 

    // let $component = $(document.getElementById('component')); 

    if (storage) { 
     let state = JSON.parse(storage.getItem('state')); 

     if (state) { 
      $('h1.tree-toggler').trigger('click'); 
      // $component.toggle(300); 
     } 
    } 

    $('h1.tree-toggler').click(function() { 
     if (storage) { 
      storage.setItem('state', (!JSON.parse(storage.getItem('state')) || true)) 
     } 
     $(this).parent().children('ul.tree').toggle(300); 
    }); 
}); 

您可以切换元件($component)手动或触发你已经拥有的事件(h1.tree-toggler[click])。

+0

对不起,我还在学习JavaScript。你能解释$ component手动还是我的事件? – Searle

+0

变量'$ component'会引用您使用触发器事件访问的'ul.tree'元素。可以更方便地存储对元素的引用并切换可见性,而不是访问切换器 - >父 - >子[ul.tree]并调用该元素的切换。当使用引用时,你可以简单地在状态检查和触发事件中调用'$ component.toggle(300)'。 –

相关问题