Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法更新Javascript对象文本中的值,然后更新页面_Javascript_Jquery_Arrays - Fatal编程技术网

无法更新Javascript对象文本中的值,然后更新页面

无法更新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"

我在这里尝试了10个关于其他问题的答案,但似乎什么都不起作用。我试过了,地图和格雷普

我想更改对象文字中的值,然后更新我的列表

以下是阵列:

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,您将看到基于您给我的代码的状态更改。但现在这些复选框都死了。