如何通过单击按钮将背景色保存在Cookie中?

时间:2018-12-23 15:00:40

标签: javascript html cookies

我目前正在尝试了解JavaScript中的Cookie。

我的问题是:我有三个按钮,红,绿,蓝,如果我单击红色,例如,应将红色背景色保存在cookie中,以便重新加载网页上的红色。

document.cookie ="red";
document.cookie ="green";
document.cookie ="blue";
function BackgroundRed(){
document.cookie = "background-color=red";
}


<button onClick="BackgroundRed()" style="background-color:red">Rot</button>
<button onClick="alertCookie()" style="background-color:green">Grün</button>
<button onClick="alertCookie()" style="background-color:blue">Blau</button>

1 个答案:

答案 0 :(得分:2)

您可以这样做:

window.addEventListener('DOMContentLoaded', function() {
  var cookieValue = getCookie('backgroundColor'),
      btns = document.querySelectorAll('.color-btn');

  if (cookieValue) {
    setBackgroundColor(cookieValue);
  }
  
  Array.from(btns).forEach(function(btn) {
    btn.addEventListener('click', function() {
      var color = this.getAttribute('data-color');
      setBackgroundColor(color);
    });
  });
});

function setBackgroundColor(color) {
  document.body.style.backgroundColor = color;
  setCookie('backgroundColor', color);
}

function getCookie(name) {
  var cookies = document.cookie.split(';'),
      cookie = cookies.find(function(str) { return str.indexOf(name + '=') === 0; });
  if (cookie) {
    return cookie.split('=')[1];
  }
  return null;
}

function setCookie(name, value) {
  document.cookie = name + '=' + value;
}
body { background: red; }
button { padding: 1em; }
[data-color="red"] { background: red; }
[data-color="blue"] { background: blue; }
[data-color="green"] { background: green; }
<button class="color-btn" data-color="red"></button>
<button class="color-btn" data-color="blue"></button>
<button class="color-btn" data-color="green"></button>

  

注意:此演示无法在Stack Overflow上运行,因为它已被沙盒化,并且不接受Cookie

编辑:

在上面的示例中,为了清楚起见,我没有在Cookie上设置有效期限。这意味着该cookie仅在当前会话(即,当您关闭所有浏览器选项卡时,它将消失)中停留。您可以选择将其保留更长的时间。例如,一年:

var expiry = new Date();
expiry.setFullYear(expiry.getFullYear() + 1);
document.cookie = name + '=' + value + '; expires=' + expiry.toUTCString() + ';';