Я пробовал около 10 ответов на другие вопросы, но ничего не работает. Я пробовал каждый, а также карту и grep.
Я хочу изменить значение в литературе объекта, а затем обновить список.
Здесь массив:
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"
}
];
Я отключаю подсказку, полученную от ли, которую пользователь нажал. Я использую ключ статуса для изменения классов на ли.
Здесь мой 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
. Это не верно. goals
- это массив. Ваша цель - проверить каждый элемент в массиве. Тогда вы на самом деле ничего не делаете с возвращением. return
внутри each
объекта просто прерывает цикл или продолжает его (в зависимости от возвращаемого значения). Я думаю, вы хотели назначить его. Попробуй это:
$.each(goals, function(i, el) {
if (el.goalguid === goalguid) {
el.status = updateStatus;
return false; // break the each
}
});
Кроме того, удалите этот бит, который заменит любые изменения, сделанные вами each
что хранится в локальном хранилище:
goals = JSON.parse(localStorage["goals"]);
each
буквально ничего не делает. Он содержит операторыif
и return, которые никогда не используются (на самом деле он просто потенциально разрывает цикл). Кроме того, вы проверяете свойства массива, а не элементы в массиве.