Javascript 使用本地存储或cookie检测菜单单击

Javascript 使用本地存储或cookie检测菜单单击,javascript,Javascript,如果客户单击megaMenu,我需要设置cookie或使用本地存储。默认情况下,这需要为false,如果客户单击菜单按钮,则在下一页上设置为true。任何帮助都将不胜感激。以下是我到目前为止所掌握的内容,但我仍停留在如何在第二页获得megaClicked=true的问题上 var megaClicked = { value: false }; var megaMenu = $("#menu-top-navigation > div"); // check local storage on

如果客户单击megaMenu,我需要设置cookie或使用本地存储。默认情况下,这需要为false,如果客户单击菜单按钮,则在下一页上设置为true。任何帮助都将不胜感激。以下是我到目前为止所掌握的内容,但我仍停留在如何在第二页获得megaClicked=true的问题上

var megaClicked = { value: false };
var megaMenu = $("#menu-top-navigation > div");
// check local storage on page load
if (localStorage.getItem('mega')) {
    megaClicked = JSON.parse(localStorage.getItem('mega'))
}

megaMenu.bind('click', function () {
    megaClicked.value = true;
    localStorage.setItem('mega', JSON.stringify(megaClicked));
})

如果存在,则获取值,如果不存在,则存储值

var megaMenu = $("#menu-top-navigation > div");
// check local storage on page load
if (localStorage.getItem('mega')) {
  var megaClicked = JSON.parse(localStorage.getItem('mega'))
}else{
  var megaClicked = { value: false };
  localStorage.setItem('mega', JSON.stringify(megaClicked));

 }

megaMenu.bind('click', function () {
    megaClicked.value = true;
    localStorage.setItem('mega', JSON.stringify(megaClicked));
})
请记住,一旦您运行代码,本地存储项将一直保留,直到您将其删除。因此,首先,if将始终为真。也许较短的版本可以是:

if (+localStorage.getItem('mega')) {
  var megaClicked = +localStorage.getItem('mega');
}else{
  localStorage.setItem('mega', 0);

 }

$("#menu-top-navigation > div").bind('click', function () {    
    localStorage.setItem('mega', 1);
})

下面的演示在此不起作用,因此。要测试功能演示,请转到此。它有两页:

  • 由于页面位于同一域中,因此两个页面共享相同的Web存储。让两个页面共享相同的外部脚本将一致地对相同的Web存储应用相同的行为

  • 函数
    menuUse(temp)
    传递一个指定为
    temp
    的布尔值。如果要在检测到“已使用”标志后将其删除,请将
    temp
    传递为
    “已使用”

如果希望此行为不必使用
temp
参数,请将所有名为:
localStorage
的对象更改为
sessionStorage

在演示和演示中对详细信息进行了评论。演示不起作用,请参阅。

演示
$(函数(){
//如果要在检测到标志后将其从存储器中删除,请传递true
menuUse();
$('#mega')。在('click',showHide');
//无论何时使用megamenu,“used”(已使用)标志均存储为true
函数showHide(e){
$(this.find('ul').slideToggle();
setItem(“已使用”,JSON.stringify(“已使用”);
}
//在第1页或第2页的每次页面加载上,都会检查“已使用”标志
函数菜单(临时=假){
var data=JSON.parse(localStorage.getItem(“used”);
如果(数据==“已使用”){
返回动作(temp);
}else if(数据===null){
console.log('Mega未使用');
返回false;
}否则{
log('标志尚不存在');
返回false;
}
}
//如果menuUse通过true且“used”标志为true,则该标志将被删除
功能动作(温度){
如果(临时){
log('Mega used,webStorage条目renoved');
localStorage.removietem(“已使用”);
}否则{
console.log(“Mega-used”);
}
返回false;
}
});
ul{
列表样式:无;
}
.隐藏{
显示:无
}
a{
显示:块
}

第1页

您的代码有什么问题吗?抱歉,我刚刚编辑了这个问题。您认为如何改进代码@埃梅厄
menuUse(true)