无法更新Javascript对象文本中的值,然后更新页面
我在这里尝试了10个关于其他问题的答案,但似乎什么都不起作用。我试过了,地图和格雷普 我想更改对象文字中的值,然后更新我的列表 以下是阵列:无法更新Javascript对象文本中的值,然后更新页面,javascript,jquery,arrays,Javascript,Jquery,Arrays,我在这里尝试了10个关于其他问题的答案,但似乎什么都不起作用。我试过了,地图和格雷普 我想更改对象文字中的值,然后更新我的列表 以下是阵列: goals = [ { goalguid: "691473a7-acad-458e-bb27-96bac224205b", category: "personal", datecreated: "2013-10-20", startdate: "2013-10-28", enddate: "2013-11-26"
goals = [
{
goalguid: "691473a7-acad-458e-bb27-96bac224205b",
category: "personal",
datecreated: "2013-10-20",
startdate: "2013-10-28",
enddate: "2013-11-26",
goal: "go to store",
icon: "cart",
status: "completed",
username: "jtmagee",
userguid: "0c7270bd-38e8-4db2-ae92-244de019c543"
}, {
goalguid: "9e693231-e6d8-4ca9-b5c8-81ea7a80a36a",
category: "personal",
datecreated: "2013-10-20",
startdate: "2013-10-27",
enddate: "2013-11-27",
goal: "Brush Teeth",
icon: "doctor",
status: "inprogress",
username: "jtmagee",
userguid: "0c7270bd-38e8-4db2-ae92-244de019c543"
}, {
goalguid: "8d23005d-f6f3-4589-bb85-a90510bccc21",
category: "work",
datecreated: "2013-10-20",
startdate: "2013-10-26",
enddate: "2013-11-28",
goal: "Arrive on Time",
icon: "alarm",
status: "inprogress",
username: "jtmagee",
userguid: "0c7270bd-38e8-4db2-ae92-244de019c543"
}, {
goalguid: "ac879673-19eb-43f6-8b95-078d84552da0",
category: "school",
datecreated: "2013-10-20",
startdate: "2013-10-24",
enddate: "2013-11-29",
goal: "Do Math Homework",
icon: "book",
status: "missed",
username: "jtmagee",
userguid: "0c7270bd-38e8-4db2-ae92-244de019c543"
}
];
我正在键入从用户单击的li中获取的goalguid。我使用状态键更改li上的类
下面是我的jQuery,它捕捉到了点击复选框:
$(".goals").delegate("input[type=checkbox]", "click", function() {
goalguid = $(this).parent().parent().data("goalguid");
emailGoal = $(this).parent().data('goal');
if ($(this).prop("checked")) {
$(this).parent().parent().removeClass("inprogress missed").addClass("completed").prop("checked", true);
updateStatus = 'completed';
return updateTheGoal();
} else {
$(this).parent().parent().removeClass("completed").addClass("inprogress").prop("checked", false);
updateStatus = 'inprogress';
return updateTheGoal();
}
});
这是我不能去工作的地方。有些尝试完全清除了阵列,但大多数尝试(包括此尝试)除了使我的列表闪烁外,什么也不做。displayGoalList函数可以很好地用于其他用途
updateTheGoal = function() {
var goalList;
$.each(goals, function() {
if (goals.goalguid === goalguid) {
return goals.status === updateStatus;
}
});
goals = JSON.parse(localStorage["goals"]);
goalList = $.grep(goals, function(e) {
return e.userguid === userguid;
});
localStorage.setItem(userguid + "Goals", JSON.stringify(goalList));
logSummary();
return displayMyGoalList();
};
非常感谢您的帮助。谢谢
$.each(goals, function() {
if (goals.goalguid === goalguid) {
return goals.status === updateStatus;
}
});
您正在检查goals.goalguid
并设置goals.status
。这是错误的<代码>目标是一个数组。您的目的是检查数组中的每个元素。那么,你的回报实际上没有做任何事情<代码>返回在中,每个
只是中断循环或继续循环(取决于返回值)。我想你是有意分配的。试试这个:
$.each(goals, function(i, el) {
if (el.goalguid === goalguid) {
el.status = updateStatus;
return false; // break the each
}
});
此外,删除此位,该位将用存储在本地存储器中的任何内容替换您的所做的任何更改:
goals = JSON.parse(localStorage["goals"]);
您还可以添加您使用的html吗?我会尝试重现这个问题,然后尝试找出解决方案。可能只是它的一个划痕。只是为了重现这一点并签入JSFIDLE(例如;)我不确定你想做什么,但是你的每一个实际上都没有任何作用。它包含一个if
和一个从未使用过的return语句(实际上它可能会中断循环)。除此之外,您正在检查数组的属性,而不是数组中的元素。您的答案非常有效。关于JSON.parse的说明让我意识到这就是我的setItem需要的地方。还有一个很明显的初学者问题:i是为每个元素提供一个计数器,而el是数组中正在计数的元素的占位符?最后,不确定协议:我是否应该在问题对我起作用时用代码更新它,以便将来的读者可以看到您的解决方案集成到其中?非常感谢詹姆斯·蒙塔涅。现在我只能点击列表中的一项。我不能取消选中它或检查任何其他项目。是的,这个解决方案只工作一次。它仅在第一次单击时更改和更新对象。之后什么都没有。我尝试在类更改的末尾添加.checkboxradio(“刷新”),这将返回框和类更改,但随后我丢失了对对象的更新。我看不出这只起作用一次的原因。如果你能在中重新创建问题,我可能会找到问题。谢谢你坚持我,詹姆斯。这是我第一次尝试制作小提琴,所以有点乱。CSS都搞砸了,但是如果你把结果窗口弄宽了,你就可以阅读它了。点击玛丽·琼斯学生。取消选中第一个完成的复选框。如果您有对resources/localstorage开放的devtools,您将看到基于您给我的代码的状态更改。但现在这些复选框都死了。