невозможно обновить значение в литерале объекта Javascript, а затем обновить страницу

0

Я пробовал около 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();
};

Буду признателен за любую оказанную помощь. Благодарю.

  • 0
    Можете ли вы также добавить HTML, который вы используете? Я хотел бы воспроизвести проблему, а затем попытаться найти решение. Может быть просто царапина этого ofc. Просто воспроизвести это и проверить в jsfiddle например;)
  • 0
    Я не совсем уверен, что вы пытаетесь сделать, но each буквально ничего не делает. Он содержит операторы if и return, которые никогда не используются (на самом деле он просто потенциально разрывает цикл). Кроме того, вы проверяете свойства массива, а не элементы в массиве.
Теги:
arrays

1 ответ

0
$.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"]);
  • 0
    Ваш ответ работал отлично. Замечание о JSON.parse заставило меня понять, что именно там должен быть мой setItem. Кроме того, очевидный вопрос для начинающих: так что я должен предоставить счетчик для каждого, а el является заполнителем для элементов в массиве, через который он рассчитывает? Наконец, не уверен в протоколе: должен ли я обновить вопрос с помощью кода, который работал для меня, чтобы будущие читатели могли видеть ваше решение интегрированным в него? Большое спасибо @ Джеймс-Монтань
  • 0
    Ой-ой. Теперь я могу нажать только на один элемент в моем списке. Я не могу снять это или проверить любые другие предметы.
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню