将LocalStorage与复选框一起使用默认选中

时间:2016-07-21 23:54:04

标签: javascript

笔: 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");

1 个答案:

答案 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");