S. Georgian S. Georgian - 2 months ago 8
Javascript Question

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>

Answer

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.

Comments