您save()
需要进行一些更改才能使其正常工作:
function save(){
var navBtnVal = document.getElementById("nav-btn").value;
sessionStorage.setItem('navBtn',navBtnVal);
}
正如@Donte'Trumble 在您的评论中指出的那样,该变量nav-btn
的语法不正确。那会抛出一个错误。变量名中不能有连字符。我已将名称更改为navBtnVal
.
sessionStorage.setItem()
有2个参数,第一个是key
,第二个是value
。您试图将 a 设置value
为key
. 即使这行得通,您以后也无法对此做任何事情。我将其设置为sessionStorage.setItem('navBtn',navBtnVal);
.
现在要访问您的值,navBtn
您可以简单地调用:sessionStorage.navBtn
。
在您checkFunction()
中,您正在为复选框元素的任何更改创建一个侦听器。您的第二个参数是传递OnChange
. 我们需要查看这个函数的代码。否则,我假设您想调用您的save()
.
checkbox.addEventListener("onChange",save,false);
更新
我根据您在评论中的问题添加了额外的逻辑。我们确实需要额外的检查。并且还对您当前的代码进行了一些更改。我在这里创建了一个工作示例。
//changed function name to be a bit more descriptive
//first we need to see if we have a value in sessionStorage that we should apply to the checkbox.
//Then we'll add our event listener. It should be 'change' not 'onchange'. It is passing the 'save' function as a callback.
//last we call 'toggleMenu()' to determine which state the menu should be in
function init() {
var checkbox = document.getElementById("nav-btn");
if (sessionStorage.navBtn == 'true') {
checkbox.checked = true;
} else {
checkbox.checked = false;
}
checkbox.addEventListener("change", save);
toggleMenu();
}
//this saves to sessionStorage. Note hoe I changed it to 'checked' instead of 'value'. Checked determines whether or not the checkbox is checked & returns true or false.
//last we call 'toggleMenu()' to determine which state the menu should be in
function save() {
var navBtnVal = document.getElementById("nav-btn").checked;
sessionStorage.setItem('navBtn', navBtnVal);
toggleMenu();
}
//this alters the 'display' property to none or block depending on the value in sessionStorage.
function toggleMenu() {
var navEl = document.getElementById('nav');
if (sessionStorage.navBtn == 'false') {
navEl.style.display = 'none';
} else {
navEl.style.display = 'block';
}
}
//changed to use DOMContentLoaded. This waits for the page to load before executing.
window.addEventListener("DOMContentLoaded", init);