javascript - 复选框和本地存储
问题描述
如果您愿意,我有一个任务列表,并且我正在尝试创建复选框,当我返回页面但关闭浏览器或硬刷新会杀死我的选择时,这些复选框会持续存在于每个任务旁边。我找到了保存单个复选框的代码,但是如何遍历不同的框并在下次输入时保留它们?这似乎是一个非常简单的过程,但我对 javascript 非常陌生......我可以在 vbscript 中轻松完成此操作,但我希望它可以在任何地方工作,而不仅仅是 IE!
这一切都是新手,所以请温柔一点。
<input type="checkbox" id="whatever-1" />This task
<input type="checkbox" id="whatever-2" />This task
<input type="checkbox" id="whatever-3" />This task
<input type="checkbox" id="whatever-4" />This task
<input type="checkbox" id="whatever-5" />This task
<input type="button" value="Save" onclick="save();" />
// then enter variation of the code I found here
<script >
function save() {
//enter iteration sequence
var checkbox = document.getElementById("box");
localStorage.setItem("box", checkbox.checked);
}
//for loading...
var checked = JSON.parse(localStorage.getItem("box"));
document.getElementById("box").checked = checked; <
/script>
解决方案
要检索您可以使用的所有元素document.querySelectorAll
,并将执行该工作的过滤器作为参数传递。在这种情况下,您要检索属性值等于htlm
的所有元素。在检索到所有具有 的元素后,您应该遍历列表的所有元素。对于每个元素,您应该将复选框的 id 存储为本地存储,复选框的 id 存储 在本地存储中。type
checkbox
type="checkbox"
key
checked
value
下面是代码:
<script>
save = function(){
var list = document.querySelectorAll(`[type*="checkbox"]`);
list.forEach( el => {
localStorage.setItem(el.id, el.checked);
console.log(el.id,el.checked);
})
}
</script>
下面是使用我们存储在本地存储中的值更新复选框的代码。
var list = document.querySelectorAll(`[type*="checkbox"]`);
list.forEach( el => {
var checked = JSON.parse(localStorage.getItem(el.id));
document.getElementById(el.id).checked = checked;
});
如果你想使用cookie来存储信息而不是本地存储。更多信息链接:https ://www.guru99.com/cookies-in-javascript-ultimate-guide.html 。
function createCookie(cookieName, cookieValue, daysToExpire) {
var date = new Date();
date.setTime(date.getTime() + (daysToExpire * 24 * 60 * 60 * 1000));
document.cookie = cookieName + "=" + cookieValue + "; expires=" + date.toGMTString();
}
function accessCookie(cookieName) {
var name = cookieName + "=";
var allCookieArray = document.cookie.split(';');
for (var i = 0; i < allCookieArray.length; i++) {
var temp = allCookieArray[i].trim();
if (temp.indexOf(name) == 0)
return temp.substring(name.length, temp.length);
}
return "";
}
本地存储版本
<html>
<head>
</head>
<body>
<div>
<input type="checkbox" id="whatever-1" />This task
<input type="checkbox" id="whatever-2" />This task
<input type="checkbox" id="whatever-3" />This task
<input type="checkbox" id="whatever-4" />This task
<input type="checkbox" id="whatever-5" />This task
<input type="button" value="Save" onclick="save();" />
</div>
<script>
window.onload= function(){
var list = document.querySelectorAll(`[type*="checkbox"]`);
list.forEach( el => {
var checked = JSON.parse(localStorage.getItem(el.id));
document.getElementById(el.id).checked = checked;
});
}
save = function(){
var list = document.querySelectorAll(`[type*="checkbox"]`);
list.forEach( el => {
localStorage.setItem(el.id, el.checked);
console.log(el.id,el.checked);
})
}
</script>
</body>
</html>
带有饼干的版本
<html>
<head>
</head>
<body>
<div>
<input type="checkbox" id="whatever-1" />This task
<input type="checkbox" id="whatever-2" />This task
<input type="checkbox" id="whatever-3" />This task
<input type="checkbox" id="whatever-4" />This task
<input type="checkbox" id="whatever-5" />This task
<input type="button" value="Save" onclick="save();" />
</div>
<script>
window.onload= function(){
var list = document.querySelectorAll(`[type*="checkbox"]`);
list.forEach( el => {
var checked = JSON.parse(accessCookie(el.id));
document.getElementById(el.id).checked = checked;
});
}
save = function(){
var list = document.querySelectorAll(`[type*="checkbox"]`);
list.forEach( el => {
createCookie(el.id, el.checked,1);//1 is the day to expire
console.log(el.id,el.checked);
})
}
function createCookie(cookieName, cookieValue, daysToExpire) {
var date = new Date();
date.setTime(date.getTime() + (daysToExpire * 24 * 60 * 60 * 1000));
document.cookie = cookieName + "=" + cookieValue + "; expires=" + date.toGMTString();
}
function accessCookie(cookieName) {
var name = cookieName + "=";
var allCookieArray = document.cookie.split(';');
for (var i = 0; i < allCookieArray.length; i++) {
var temp = allCookieArray[i].trim();
if (temp.indexOf(name) == 0)
return temp.substring(name.length, temp.length);
}
return "";
}
</script>
</body>
</html>
推荐阅读
- python-3.x - Python3 f-strings:如何避免必须转义文字大括号?
- java - Spring Boot 中如何将 AOP 日志保存到数据库中
- powerbi - Powerbi 数据导入不正确
- c# - C#中DTO类重命名属性的属性[JsonProperty]
- sql-server - 仅按父级排序的 T-SQL 递归查询
- node.js - 在 forEach 结束之前处理的变量
- docker - 我想在容器中打印 docker run 环境变量
- reactjs - React Datepicker - 当我绑定启用 e.preventDefault() 时显示错误的日期
- ios - CABasicAnimation 默认运行在主线程还是后台线程
- python - 求解微分方程,但出现错误提示“'Add' object is not callable”。我正在使用 Jupyter 笔记本