JavaScript - 使用 sessionStorage 保存在文档之间共享的复选框状态
JavaScript - Save checkbox state shared between documents using sessionStorage
我正在尝试使用 sessionStorage 保存复选框的状态。我对 JavaScript 很陌生,所以我的理解很基础。
我在网站上使用复选框来显示导航菜单。该复选框出现在网站的每个页面上(相同的 ID)。保存复选框状态的目的是在导航到新页面时使导航菜单已经"open"。目前,菜单 "jumps" 在页面更改时关闭,并破坏了 CSS 过渡效果的目的。
非常感谢任何帮助。
谢谢
这就是我目前得到的(从网络上截取的内容)。
JS:
<script type="text/javascript">
function checkFunction(){
var checkbox = document.getElementById("nav-btn");
checkbox.addEventListener("onChange",OnChange,false);
}
function save(){
var nav-btn=document.getElementById("nav-btn").value;
sessionStorage.setItem(nav-btn);
}
window.addEventListener("load",checkFunction,false);
</script>
HTML:
<input type="checkbox" id="nav-btn" class="nav-btn" />
<label for="nav-btn"></label>
您的 save()
需要一些更改才能使其正常工作:
function save(){
var navBtnVal = document.getElementById("nav-btn").value;
sessionStorage.setItem('navBtn',navBtnVal);
}
正如@Donte'Trumble 在您的评论中指出的那样,变量 nav-btn
是不正确的语法。那会抛出一个错误。变量名中不能有连字符。我已将名称更改为 navBtnVal
。
sessionStorage.setItem()
有两个参数,第一个是key
,第二个是value
。您试图将 value
设置为 key
。即使这有效,你以后也不能用它做任何事情。我将它设置为 sessionStorage.setItem('navBtn',navBtnVal);
。
现在要访问 navBtn
的值,您只需调用:sessionStorage.navBtn
.
在您的 checkFunction()
中,您正在为复选框元素的任何更改创建一个侦听器。您的第二个参数正在传递 OnChange
的回调。我们需要查看此功能的代码。否则,我假设你想打电话给你的 save()
。
checkbox.addEventListener("onChange",save,false);
更新
我已根据您在评论中提出的问题添加了额外的逻辑。我们确实需要额外的检查。还有一些对您当前代码的更改。我创建了一个 working example here.
//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);
我正在尝试使用 sessionStorage 保存复选框的状态。我对 JavaScript 很陌生,所以我的理解很基础。
我在网站上使用复选框来显示导航菜单。该复选框出现在网站的每个页面上(相同的 ID)。保存复选框状态的目的是在导航到新页面时使导航菜单已经"open"。目前,菜单 "jumps" 在页面更改时关闭,并破坏了 CSS 过渡效果的目的。
非常感谢任何帮助。
谢谢
这就是我目前得到的(从网络上截取的内容)。
JS:
<script type="text/javascript">
function checkFunction(){
var checkbox = document.getElementById("nav-btn");
checkbox.addEventListener("onChange",OnChange,false);
}
function save(){
var nav-btn=document.getElementById("nav-btn").value;
sessionStorage.setItem(nav-btn);
}
window.addEventListener("load",checkFunction,false);
</script>
HTML:
<input type="checkbox" id="nav-btn" class="nav-btn" />
<label for="nav-btn"></label>
您的 save()
需要一些更改才能使其正常工作:
function save(){
var navBtnVal = document.getElementById("nav-btn").value;
sessionStorage.setItem('navBtn',navBtnVal);
}
正如@Donte'Trumble 在您的评论中指出的那样,变量 nav-btn
是不正确的语法。那会抛出一个错误。变量名中不能有连字符。我已将名称更改为 navBtnVal
。
sessionStorage.setItem()
有两个参数,第一个是key
,第二个是value
。您试图将 value
设置为 key
。即使这有效,你以后也不能用它做任何事情。我将它设置为 sessionStorage.setItem('navBtn',navBtnVal);
。
现在要访问 navBtn
的值,您只需调用:sessionStorage.navBtn
.
在您的 checkFunction()
中,您正在为复选框元素的任何更改创建一个侦听器。您的第二个参数正在传递 OnChange
的回调。我们需要查看此功能的代码。否则,我假设你想打电话给你的 save()
。
checkbox.addEventListener("onChange",save,false);
更新
我已根据您在评论中提出的问题添加了额外的逻辑。我们确实需要额外的检查。还有一些对您当前代码的更改。我创建了一个 working example here.
//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);