事件监听器在 cookie 模式中不起作用
2020-08-13
624
第一次来电,请温柔一点。
我正在 JavaScript 反射过程中遇到 cookie 模式问题。您需要能够在进入网站时弹出 cookie,用户需要单击“确定”,它存储在本地,并且不会在用户刷新浏览器时弹出。
我创建了一个基本模式并编写了 JavaScript,部分工作正常,但事件处理程序不起作用。
cookie 值为 false,您可以在控制台中看到它,但是当您单击按钮时,它不会变为 true。
我已将代码放在下面,如果有人能帮忙,我将不胜感激。
<div id ="overlay">
<div class="modal">
<p>
</p>
</div>
<button class="settings_button">CHANGE SETTINGS</button>
<button class="modal_accept_button">ACCEPT COOKIES</button>
<button class="modal_accept_button">Accept</button>
</div>
let modalObject = document.querySelector(".modal");
let modalSettings = document.querySelector('.settings_button');
let modalAccept = document.querySelector('.modal_accept_button');
let modalOverlay = document.querySelector("#overlay");
function showModal() {
modalObject.classList.remove('deactive');
modalOverlay.classList.remove('deactive');
}
function disableModal() {
modalObject.classList.add('deactive');
modalOverlay.classList.add('deactive');
}
localStorage.setItem('cookie', 'false');
window.addEventListener('DOMContentLoaded', () => {
if (localStorage.getItem('cookie') == 'true') {
console.log("Cookie is already in place.");
} else if (localStorage.getItem('cookie') === null ||
localStorage.getItem("Cookie accepted") == 'false') {
console.log("Cookie has been not yet been accepted.");
showModal();
modalAccept.addEventListener('click', () => {
localStorage.setItem('cookie','true');
disableModal() ;
});
}
});
2个回答
在您的代码中,有一行将其设置为 false:
localStorage.setItem('cookie', 'false');
每次您访问该页面时,这将 始终 将其设置为 false。因此,即使您将其设置为 true,当您刷新时,它也会再次变为 false。
删除该行应该有效,因为您不需要将其设置为 false
Emre Koc
2020-08-13
您的代码中有
localStorage.setItem('cookie', 'false');
,这会在每次运行代码时将您的 ls 更改为 false,
只需将其删除
,我认为最好将本地存储保存在变量中,然后在 if 语句中使用该变量:
const modal = document.querySelector('.modal');
const acceptBtn = document.querySelector('#acceptCookies');
(() => {
const isCookieAccepted = JSON.parse(window.localStorage.getItem('cookie'));
if (isCookieAccepted) {
alert(`Cookie status: ${isCookieAccepted}`)
} else {
modal.classList.add('show')
}
})();
acceptBtn.addEventListener('click', () => {
window.localStorage.setItem('cookie', true);
modal.classList.remove('show')
})
Ari Shojaei
2020-08-13