使用本地存储持久化检查状态
Persisting checked state using localstorage
我从之前关于如何在localstorage中存储页面上所有复选框的选中/未选中状态的问题中提取了以下代码片段:
$(function(){
var test = localStorage.input === 'true'? true: false;
$('[type="checkbox"]').prop('checked', test || false);
});
$('[type="checkbox"]').on('change', function() {
localStorage.input = $(this).is(':checked');
console.log($(this).is(':checked'));
});
当我选中其中一个复选框然后刷新页面时,一旦它重新加载,每个单个复选框都被选中。
我如何让这个存储每个单独的选中状态?
注我可能有0 - 50之间可用的复选框取决于有多少优秀的记录有在我的gridview,所以我没有固定的输入id的使用记录id关联到每一行。
如果您想依赖localStorage解决方案,您可以这样做:
$(function(){
$('[type="checkbox"]').each(function () {
var $this = $(this),
name = $this.attr('name');
$this.prop('checked', localStorage[name] === 'true');
});
});
$('[type="checkbox"]').on('change', function() {
var $this = $(this),
name = $this.attr('name');
localStorage[name] = $this.is(':checked');
});
http://jsfiddle.net/mct7xgq2/第一部分在页面加载时执行,并根据localStorage[name]值设置检查状态,其中name是输入的name属性。
第二部分在任何复选框被更改时执行:它像以前一样获取输入的名称,但不是读取值,而是写入值。
如果页面无法加载,最好将值存储在JS
对象中,而不是使用localStorage
。
只需要创建一个JS对象,并不断向其中推送值并存储
客户端解决方案如果页面不重新加载
$(function(){
var checkedItems ={};
$('[type="checkbox"]').on('change', function() {
//Store the ID value also in the localstorage
if($(this).is(':checked')){
var id = $(this).attr('id'); //Get the id if this is checked
checkedItems['id_'+id] = id;
}
});
});
如果页面重新加载,那么你最好的选择是使用服务器端概念,如Session
。每次选中一个特定的复选框时发送一个AJAX
请求,并将其存储在会话中。
服务器端解决方案
$(function(){
$('[type="checkbox"]').on('change', function() {
//Store the ID value also in the localstorage
if($(this).is(':checked')){
var id = $(this).attr('id'); //Get the id if this is checked
$.ajax({
type: 'POST',
url: your server side url path, //store it in a session
data: {'id':id},
dataType: 'html',
success: function(result){
//so some functionality
}
});
}
});
});
查看FIDDLE LINK
这是d3.js使用三元运算符的解决方案。它将此复选框的id与localStorage中key=id下存储的值进行比较。如果值为"true",则'this。Checked属性设置为true,否则设置为null (null表示没有Checked属性)
var box = d3.selectAll(".box").each(function(){
var id = this.id;
var storageValue = localStorage.getItem(id);
this.checked = storageValue === "true" ? true : null;
});
以前我有setItem在localStorage。复选框是动态创建的,附加到表
中的行。 rows.append('input')
.attr('type','checkbox')
,它又基于来自cvs的数据。复选框的id如下:
.attr("id", function(d,i) { return 'box'+' '+i; })
和复选框状态的'change':
d3.selectAll(".box").on("change", function() {
var id = this.id;
if ( this.checked ){
localStorage.setItem(id, this.checked);
}
else {
localStorage.removeItem(id);
}
});
我有数千行,每一行都有一个复选框。我在时间线检查中没有发现重大问题。所以我想这是一个很好的解。我不是d3.js专家。
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 如何检查管道中未定义的项目
- 主干-不管怎样,检查事件以前是否绑定过
- 使用javascript检查多个输入值,并在1次检查中标记多个输入框
- 递归使用 eval() 是检查程序执行的好方法吗?
- 检查onsubmit doenst work jquery contactform上的函数
- JavaScript 检查隐藏字段中的值并将其设置为隐藏字段值
- API密钥使用和检查示例
- 如何让程序检查所选单词中是否有按键
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- 用于检查数组中是否存在元素的javascript自定义方法
- 如何检查字符串的一部分与数组匹配
- Jquery如何检查今天的时间大于使用给定时间
- 使用javascript反复检查用户在facebook上的登录状态
- 使用 jQuery 检查所有值是否为空或已填充
- 使用Javascript使用数组检查文本框中的值
- 在我的服务工厂中,我查找了一个大型数据集——我想持久化它,并检查它的存在,以避免再次调用它
- 如何在Javascript中持久化检查屏幕宽度
- 使用本地存储持久化检查状态