javascript - 如何为当前打开的标签实现本地存储?
问题描述
我按照此链接将数据存储在我的浏览器中以获取单选按钮。问题是如果我在另一个选项卡中打开相同的 url,则单选按钮会根据上一个选项卡选择。
功能是 - 提交按钮重定向到另一个页面。所以,我需要的是本地存储该特定当前打开的选项卡和特定链接。
我正在使用的代码
<!doctype html>
<html>
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=2.0, user-scalable=yes" />
<title>Save state of checkbox on refresh using JavaScript</title>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" />
<link href="css/custom.css" rel="stylesheet" />
<style type="text/css">
</style>
</head>
<body>
<ul class="list-group">
<li class="list-group-item"><input type="checkbox" class="save-cb-state" name="mycheckbox" value="asdf"> Must I save my state?</li>
<li class="list-group-item"><input type="checkbox" class="save-cb-state" name="anothercheckbox" value="1"> Try and save this</li>
<li class="list-group-item"><input type="checkbox" class="save-cb-state" name="mycheckbox2" value="qwer"> This can be saved as well.</li>
</ul>
<script>
// Avoid scoping issues by encapsulating code inside anonymous function
(function() {
// variable to store our current state
var cbstate;
// bind to the onload event
window.addEventListener('load', function() {
// Get the current state from localstorage
// State is stored as a JSON string
cbstate = JSON.parse(localStorage['CBState'] || '{}');
// Loop through state array and restore checked
// state for matching elements
for(var i in cbstate) {
var el = document.querySelector('input[name="' + i + '"]');
if (el) el.checked = true;
}
// Get all checkboxes that you want to monitor state for
var cb = document.getElementsByClassName('save-cb-state');
// Loop through results and ...
for(var i = 0; i < cb.length; i++) {
//bind click event handler
cb[i].addEventListener('click', function(evt) {
// If checkboxe is checked then save to state
if (this.checked) {
cbstate[this.name] = true;
}
// Else remove from state
else if (cbstate[this.name]) {
delete cbstate[this.name];
}
// Persist state
localStorage.CBState = JSON.stringify(cbstate);
});
}
});
})();
</script>
</body>
</html>
解决方案
您应该能够使用 sessionStorage 而不是 localStorage 来管理它。有关此处差异的更多信息:https ://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage
推荐阅读
- java - 杰克逊:我怎么能忽略getter但解析setter?
- java - 在 /actuator/health 上配置超时
- javascript - 文档读取计数(如果不存在)
- r - 如何转换我的代码以提高速度(for循环)
- java - Tesseract 4.5 为相同的图像结构返回多个结果
- postgresql - 我可以在 postgres 中构造一个更新查询,其中要更新的列嵌套在一个案例中吗?
- matlab - Matlab中有一个函数可以创建矩阵,其中每个元素是矩阵索引的相同函数?
- vue.js - 如果我强制重新渲染,Vuetify 数据表错误会解决
- python-3.x - id 级别的条件复制
- javascript - 使用 ajax 调用通过 JQuery 将 ID 列表传递给 ViewModel