如何将多个复选框类名存储在localStorage中(选中时)。 以下脚本仅在key:filter
中存储一个value:test选中这些复选框时,需要存储值:[“ test2”,“ test3”]。也许通过使用数据过滤器?我还想存储复选框的类名。
我所拥有的:
$(function () {
var data = localStorage.getItem("filter");
if (data !== null) {
$("input[name='filter']").attr("checked", "checked");
}
});
$("input[name='filter']").click(function () {
if ($(this).is(":checked")) {
localStorage.setItem("filter", "test");
} else {
localStorage.removeItem("filter");
}
});
和HTML:
<div class="filterbox">
<label><input name="filter" type="checkbox" class="test1" data-filter="1" /> Test 1 </label>
<label><input name="filter" type="checkbox" class="test2" data-filter="2" /> Test 2 </label>
<label><input name="filter" type="checkbox" class="test3" data-filter="3" /> Test 3 </label>
<label><input name="filter" type="checkbox" class="test4" data-filter="4" /> Test 4 </label>
</div>
答案 0 :(得分:1)
正在工作的小提琴:http://jsfiddle.net/j6ukqnrv/11/
您可以通过传递数组并在读取和写入本地存储时使用JSON.stringify和JSON.parse来实现此目的。
JavaScript:
$(function () {
var data = localStorage.getItem("filter");
if (data !== null) {
$("input[name='filter']").attr("checked", "checked");
}
});
$("input[name='filter']").click(function (event) {
if ($(this).is(":checked")) {
var filterid = event.target.getAttribute('data-filter');
var storage = JSON.parse(localStorage.getItem('filter'));
var arr = [];
if(storage) {
arr = storage;
arr.push(filterid);
} else {
arr.push(filterid);
}
console.log(arr)
localStorage.setItem("filter", JSON.stringify(arr));
} else {
var filterid = event.target.getAttribute('data-filter');
var storage = JSON.parse(localStorage.getItem('filter'));
var arr = [];
if(storage) {
arr = storage;
var index = arr.indexOf(filterid);
if (index > -1) {
arr.splice(index, 1);
}
localStorage.setItem("filter", JSON.stringify(arr));
}
}
});
您的HTML:
<div class="filterbox">
<label><input name="filter" type="checkbox" class="test1" data-filter="1" /> Test 1 </label>
<label><input name="filter" type="checkbox" class="test2" data-filter="2" /> Test 2 </label>
<label><input name="filter" type="checkbox" class="test3" data-filter="3" /> Test 3 </label>
<label><input name="filter" type="checkbox" class="test4" data-filter="4" /> Test 4 </label>
</div>
答案 1 :(得分:1)
您可以这样使用:
$(function () {
var data = localStorage.getItem("filter").split(',');
console.log(data)
$.each(data, function (i, v) {
$("input[class='" + v + "']").prop('checked', true);
});
$("input[name='filter']").change(function () {
var selected = [];
$("input[name='filter']:checked").each(function () {
selected.push($(this).attr('class'));
});
console.log(selected);
localStorage.setItem("filter", selected.toString());
});
});
答案 2 :(得分:0)
使用JSON.stringify和JSON.parse,因为您需要将字符串传递给localStorage.setItem:
var arr = ["test2", "test3"];
localStorage.setItem("filter", JSON.stringify(arr));
var newArr = JSON.parse(localStorage.getItem("filter"));
console.log(newArray); // ["test2", "test3"]