我需要更新localstorage中的单个对象项而不重新加载页面。
jsFiddle:https://jsfiddle.net/7xsg8679/
这是我的代码:
if (obj.isCompletedTask === false) {
newDone.innerHTML = "Not done";
newDone.dataset.done = false;
newButton.addEventListener('click', function (e) {
newDone.innerHTML = "Done";
newDone.dataset.done = true;
newUl.style.backgroundColor = "red";
e.preventDefault();
})
}
如果我在if语句中使用if(obj.isCompletedTask === true)
- 它什么都不做。为什么呢?
答案 0 :(得分:1)
使用obj.isCompletedTask === true
按钮时,isCompletedTask
不执行任何操作,因此大括号{ ... }
之间的代码根本不会运行,因此eventListener不会附加到按钮上点击事件。
如果我理解你的意图,你可能想将if语句移到事件监听器内部。
如果要更新localstorage中的元素,可以这样做:
localStorage.setItem('list', JSON.stringify(tasks));
...但是当您的tasks
对象发生变化时,您需要自己跟踪,并手动更新localStorage。这种关系称为数据绑定。此外,您不能直接更新tasks
的子元素,每当list
中的某些内容发生更改时,您必须使用新版tasks
替换localStorage中的tasks
。
一般评论:从我在你的小提琴中看到的,我真的认为你应该看看一些框架(如vue,react或angular)。跟踪这里的变化会在一段时间后真的很烦人,而且,为什么要重新发明轮子?