S. Georgian
S. Georgian

Reputation: 143

LocalStorage array

Guys help me with this code. The idea is to save new inputs in a string and display them using HTML. Every time I add a new one the HTML displays it, if I reload the page the items are still displayed and the first getItem method and if I reload again is still working but here is the problem. After I reload the page and I insert a new element in string then it will display the just the lates inputs and will delete the ones from other sessions.

If I insert now :"one","two","three" it I will display "one,two,three" if I reload it will still display " one,two,three" which is good, but after the reload if I insert "four" it will display only "four" and I want to be displayed "one,two,three,four".

How can I make this happen?

<!DOCTYPE html>
<html>
  <body>
    <div id="result"></div>
    <button onclick="reloadd()">Reload</button>
    <button onclick="clearF()">Clear</button>
    <input id="valoare">
    <button id="adauga" onclick="adauga()">+</button>
    <button onclick="nrElemente()">ElemNr?</button>
    <script>
      var cars = [];
      var two = "kes";

      document.getElementById("result").innerHTML = localStorage.getItem("array1");

      function clearF() {
        window.localStorage.clear();
        location.reload();
      }

      function adauga() {
        var x = document.getElementById('valoare').value;
        cars.push(x);

        localStorage.setItem("array1", cars);
        document.getElementById("result").innerHTML = localStorage.getItem("array1");
      }

      function reloadd() {
        location.reload();
      }

      function nrElemente() {
        alert(localStorage.length);
      }

    </script>
  </body>
</html>

Upvotes: 2

Views: 11357

Answers (3)

mauron85
mauron85

Reputation: 1544

There were some major issues with your code, this is a fixed version:

<script type="text/javascript">
  var cars = [];
  try {
    cars = JSON.parse(localStorage.getItem("array1"));
  } catch (err) {}

  var two = "kes";
  document.getElementById("result").innerHTML = cars;

  function clearF() {
    window.localStorage.clear();
    location.reload();
  }
  function adauga() {
    var x = document.getElementById('valoare').value;
    cars.push(x);
    localStorage.setItem("array1", JSON.stringify(cars));
    document.getElementById("result").innerHTML = localStorage.getItem("array1");
  }
  function reloadd() {
    location.reload();
  }
  function nrElemente() {
    alert(localStorage.length);
  }
</script>

Upvotes: 0

user5870134
user5870134

Reputation:

Your code is not working because you are not storing your array anywhere. To save your array into localStorage you would use:

localStorage.setItem("cars", JSON.stringify(cars));

Then instead of doing this:

var cars = [];

You would load your cars array like this:

var cars = localStorage.getItem("cars");
cars = (cars) ? JSON.parse(cars) : [];

What this is doing is, it is checking if the localStorage object contains an array called cars. Now if it does it will parse that string and return the stored cars array, if it does not it will set the cars array to a new empty array.

Here, I have fixed and tidied your code:

<!DOCTYPE html>
<html>
<body>
  <div id="result"></div>
  <button onclick="reloadd()">Reload</button>
  <button onclick="clearF()">Clear</button>
  <input id="valoare" />
  <button id="adauga" onclick="adauga()">+</button>
  <button onclick="nrElemente()">ElemNr?</button>

  <script type="text/javascript">
    var array1 = localStorage.getItem("array1");
    array1 = (array1) ? JSON.parse(array1) : [];

    var two = "kes";
    document.getElementById("result").innerHTML = localStorage.getItem("array1");

    function clearF() {
      window.localStorage.clear();
      location.reload();
    }
    function adauga() {
      var x = document.getElementById("valoare").value;
      array1.push(x);
      localStorage.setItem("array1", JSON.stringify(array1));
      document.getElementById("result").innerHTML = localStorage.getItem("array1");
    }
    function reloadd() {
      location.reload();
    }
    function nrElemente() {
      alert(localStorage.length);
    }
  </script>
</body>
</html>

Also, it's considered bad practice to place your JavaScript events & functions in HTML attributes. Try to separate HTML, CSS & JS as much as possible by placing all (or at-least most) of your JS in your script element / JS file.

Good luck and all the best.

Upvotes: 2

charlietfl
charlietfl

Reputation: 171679

You are creating an empty array every page load and when you add to array you store that but never connect cars array to the data that is already stored

Try changing

var cars =[];

To

var localData = localStorage.getItem("array1");
// if localData not undefined then parse that as cars array, otherwise is empty array
var cars = localData ? JSON.parse(localData) : [];

When you go to store the cars array change to:

localStorage.setItem("array1",JSON.stringify(cars));

Upvotes: 2

Related Questions