使用cookie保存Javascript切换状态

问题描述 投票:2回答:1

我想保存站点标题显示的状态。我如何用Jquery Cookie保存它?

(function ($) {
// The initial load event will try and pull the cookie to see if the toggle is "open"
var openToggle = getCookie("show") || false;
if ( openToggle )
    div.style.display = "block";
else
    div.style.display = "none";
if ( window.location.pathname == '/' ){
    // Index (home) page
    div.style.display = "block";
}
// The click handler will decide whether the toggle should "show"/"hide" and set the cookie.
$('#Togglesite-header').click(function() {
    var closed = $("site-header").is(":hidden");
    if ( closed )
       div.style.display = "block";
    else
        div.style.display = "none";
    setCookie("show", !closed, 365 );
});

});
javascript jquery jquery-cookie
1个回答
3
投票

你有几个问题在这里。首先,您要定义一个类似IIFE的函数包装器,但是您永远不会调用它,因此您的代码将无法运行。您需要在末尾添加(jQuery)以传入引用,或者如果您的意图使用实际的document.ready事件处理程序。

其次,cookie只存储字符串,因此您需要将字符串转换为布尔值(这是一个有点JS的数据类型的雷区),或者您可以只比较字符串。试试这个:

(function($) {
  var $div = $(div);
  
  var openToggle = getCookie("show") == 'true';
  $div.toggle(openToggle);
    
  if (window.location.pathname == '/')
    $div.show();
  
  $('#Togglesite-header').click(function() {
    var closed = $("site-header").is(":hidden");
    $div.toggle(closed);
    setCookie("show", !closed, 365);
  });
})(jQuery);

还有两点需要注意。首先我修改了这个以使用jQuery。如果你已经加载它,你也可以利用它的简单性来减少代码的冗长。

其次,它假设你的getCookie()setCookie()功能正常;你没有展示他们的实现,但是因为有许多工作的例子,我不相信这是你的问题。

© www.soinside.com 2019 - 2024. All rights reserved.