笔: http://codepen.io/anon/pen/YWaJaP?editors=0010
小提琴: https://jsfiddle.net/qnLhtzss/
默认情况下,我希望选中复选框,但如果用户更改了它,我希望将其保存为用户保存的内容。
它会在用户点击链接时保存状态,但默认情况下,复选框不会被检查。
有人可以解释为什么这不起作用吗?
HTML:
<input type="checkbox" id="changePrev" checked>
<label for="changePrev">Auto Update Preview</label>
JavaScript的:
// Toggle Auto Update Preview
var checkedPrev = JSON.parse(localStorage.getItem("autoUpdate"));
var changePrev = document.getElementById("changePrev");
changePrev.checked = checkedPrev;
$("#changePrev").on("change", function() {
(this.checked) ? localStorage.setItem("autoUpdate", "true") : localStorage.setItem("autoUpdate", "false");
}).trigger("change");
答案 0 :(得分:1)
问题是第一次使用导航到页面
var checkedPrev = JSON.parse(localStorage.getItem("autoUpdate"));
将为null
,因为LocalStorage中不存在"autoUpdate"
密钥。这会随后将changePrev.checked = checkedPrev
设置为null
,最终导致复选框变为未选中状态。
您可以通过对null
的简单checkedPrev
检查来解决此问题,如果是true
则默认为null
。
// Toggle Auto Update Preview
var checkedPrev = JSON.parse(localStorage.getItem("autoUpdate"));
// If checkedPrev === null then the use has never been here before.
// Make checkedPrev default to true
checkedPrev = checkedPrev === null ? true : false;
var changePrev = document.getElementById("changePrev");
changePrev.checked = checkedPrev;
$("#changePrev").on("change", function() {
(this.checked) ? localStorage.setItem("autoUpdate", "true") : localStorage.setItem("autoUpdate", "false");
}).trigger("change");