JavaScript localStorage не работает для сохранения данных после загрузки страницы - PullRequest
0 голосов
/ 28 августа 2018

У меня есть мини-корзина JavaScript, в которой после того, как пользователь получает свою общую сумму, он вводит сумму, с которой он платит, и его изменение возвращается. Для этого мне нужно сохранить значение переменной «total» после загрузки страницы. Именно поэтому я использую localStorage. Тем не менее, это не работает. Кто-нибудь может мне помочь?

var itemsSelectedValues = [];
      // variable above is empty array that will ultimately store the items user selected to purchase
      // var total = 0;
      localStorage.setItem("total", 0);
      // variable above is set to 0 that will ultimately represent total of user purchase

      function listOfCheckedItems(catalogToLookFrom) {
        // line above defines function listOfCheckedItems, with parameter catalogToLookFrom being passed in to represent array object "shoppingItems"
        var yourItemsPurchased = $("input:checkbox:checked");
        // line above sets variable yourItemsPurchased to all the checkbox items that were checked
        for (i = 0; i < yourItemsPurchased.length; i++) {
          // line above is a for loop that loops through the entire length of array "yourItemsPurchased"
             itemsSelectedValues.push(yourItemsPurchased[i].value);
             // line above pushes the value of items in array "yourItemsPurchased" into empty array "itemsSelectedValues"
             // this action occurs each time through the loop
        } // line closes for loop
        console.log(itemsSelectedValues);
        for (i = 0; i < itemsSelectedValues.length; i++) {
          // line above loops through array itemsSelectedValues (entire length of array)
          localStorage.getItem("total") = localStorage.getItem("total"); + catalogToLookFrom[itemsSelectedValues[i]];
          // line above sets the variable "total" to itself plus the value of the item name that's in catalogToLookFrom (which represents array object "shoppingItems")
          // this happens each time through the loop
          // so 1st time "total" is set to itself (which is initially 0) plus the value of whatever the 1st item is. Then so on.....
        } // closes for loop
        document.getElementById("yourPurchase").innerHTML = "Your items purchased <strong>" + itemsSelectedValues + "</strong> came to a total of <br/><strong>$" + localStorage.getItem("total"); + "</strong>";
      } // line closes listOfCheckedItems function

      function getOrderTotal() {
        listOfCheckedItems(shoppingItems);
      }

///////// Part not working

  function whatUserPaidWith() {
    var amountUserPaid = $("#amountPaid").val();
    // line above creates variable "amountUserPaid" which is set to the value of element with an id of "#amountPaid"
    var customerChange = amountUserPaid - localStorage.getItem("total");
    document.getElementById("displayUserChange").innerHTML = "You paid <strong>" + amountUserPaid + "</strong> your change due is <strong>" + customerChange + "</strong>";

  }

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Я вижу проблему со следующей строкой вашего кода:

localStorage.getItem("total") = localStorage.getItem("total"); + catalogToLookFrom[itemsSelectedValues[i]];

Я надеюсь, что мои следующие предложения помогут вам.

Во-первых, в середине оператора не должно быть точки с запятой.
Во-вторых, localStorage.getItem("total") нельзя использовать в качестве переменной для хранения значения (как вы пытаетесь это сделать). Скорее localStorage.getItem() - это метод, который возвращает значение.

Вот цитата из документации локального хранилища

Метод getItem () интерфейса Storage, когда передается имя ключа, вернет значение этого ключа или ноль, если ключ не существует.

Поэтому я предлагаю вам изменить приведенные выше строки вашего кода следующим образом:

var newTotal = localStorage.getItem("total") + catalogToLookFrom[itemsSelectedValues[i]];
localStorage.setItem("total", newTotal);
// lines above set the local storage variable "total" to itself plus the value of the item name that's in catalogToLookFrom (which represents array object "shoppingItems")

Надеюсь, это поможет :)

0 голосов
/ 29 августа 2018

вижу несколько проблем; во-первых, вы не звоните setItem с новым итогом. Вы должны сделать что-то вроде этого, чтобы установить сумму:

function listOfCheckedItems(catalogToLookFrom) {
  var yourItemsPurchased = $("input:checkbox:checked"),
      itemsSelectedValues = [],
      total = 0
  for (i = 0; i < yourItemsPurchased.length; i++) {
      itemsSelectedValues[i] = yourItemsPurchased[i].value
      total += catalogToLookFrom[yourItemsPurchased[i].value];
  }
  localStorage.setItem("total", total)
  document.getElementById("yourPurchase").innerHTML = "Your items purchased <strong>" + itemsSelectedValues.join(',') + "</strong> came to a total of <br/><strong>$" + total + "</strong>";
} 

Также, когда вы звоните getItem, он вернет строку вместо числа. Поэтому, если вы планируете использовать арифметику со значением, вы должны преобразовать его:

var customerChange = amountUserPaid - (new Number(localStorage.getItem("total")));
...