Local Storage. Не сохраняется выведенный список
  • после перезагрузки страницы
  • Значение инпута добавляется в список li и выводится на экран по событию клика. Пушу значение инпута в массив и указываю массив в local storage, но при перезагрузке экрана все li исчезают. Как сделать, что бы при перезагрузке страницы весь список оставался на экране? Смотрел ролики и читал статьи, но всё равно не понимаю как это сделать.

    html
        <body style="background-color: rgb(20, 20, 20); color: white;">
            <div id="form" class="row m-5 d-md-flex">
                <div class="col-2 form__inp">
                    <input class="form-control" type="text"  placeholder="First name" aria-label="First name">
                </div>
                <div class="col-1 p-0">
                    <button class="btn btn-primary">Нажать</button>
                </div>
                <ul class="form__list" style="height: 100px;"></ul>
            </div>
            <script src="localStorage.js" defer></script>
        </body>
    
    JavaScript
            //Создаем массив для сохранения данных
        
        const arr= [];
        
        const funcArr = (a) => {
            a.push(document.querySelector('.form-control').value)
            console.log(a);
            return a;
        }
        
        //Создание li
        function createShowList() {
            let list = document.createElement('li');
            document.querySelector('.form__list').append(list);
            list.innerHTML = document.querySelector('.form-control').value;
            document.querySelector('.form-control').value = '';
            return list;
        };
        
        //Создание кнопки 
        
            function createBtnDelete(li) {   
                let btnDelete = document.createElement('button')
                btnDelete.innerHTML = 'Удалить'
                btnDelete.classList.add('remove-btn')
                btnDelete.style.marginLeft = '15px'
                li.append(btnDelete)
                //Удаление Li
                btnDelete.addEventListener('click', () => {
                    return li.remove()
                });
                
            };
            
            document.querySelector('.btn-primary').addEventListener('click', () => {    
                funcArr(arr);
                createBtnDelete(createShowList());
                funcLocalStorage2(arr)  
            });
            
        //Хранилище
            const funcLocalStorage2 = (arr) => {
                localStorage.setItem('a', JSON.stringify(arr));
                let res = localStorage.getItem('a');
                JSON.parse(res);
            };
    

    Ответы (1 шт):

    Автор решения: BlackStar1991

    Тут надо думать от обратного, что у вас уже есть элементы списка, и добавлять их при начальной загрузке.

    const arr = JSON.parse(localStorage.getItem("a")) || []; // Загружаем сохранённые данные если они есть
    
    document.addEventListener("DOMContentLoaded", () => {
      arr.forEach(item => addListItem(item)); // Отображаем сохранённые элементы при загрузке
    });
    
    document.querySelector(".btn-primary").addEventListener("click", () => {
      const inputValue = document.querySelector(".form-control").value.trim();
      if (inputValue === "") return; // Игнорируем пустой ввод
    
      arr.push(inputValue);
      localStorage.setItem("a", JSON.stringify(arr));
    
      addListItem(inputValue);
      document.querySelector(".form-control").value = ""; // Очищаем поле ввода
    });
    
    // Функция создания элемента списка
    function addListItem(value) {
      let list = document.createElement("li");
      list.textContent = value;
    
      createBtnDelete(list, value);
      document.querySelector(".form__list").append(list);
    }
    
    // Функция создания кнопки удаления
    function createBtnDelete(li, value) {
      let btnDelete = document.createElement("button");
      btnDelete.textContent = "Удалить";
      btnDelete.classList.add("remove-btn");
      btnDelete.style.marginLeft = "15px";
    
      li.append(btnDelete);
    
      btnDelete.addEventListener("click", () => {
        const index = arr.indexOf(value);
        if (index > -1) {
          arr.splice(index, 1); // Удаляем элемент из массива
          localStorage.setItem("a", JSON.stringify(arr)); // Обновляем localStorage
        }
        li.remove(); // Удаляем элемент из DOM
      });
    }
    <div id="form" class="row m-5 d-md-flex">
      <div class="col-2 form__inp">
        <input
          class="form-control"
          type="text"
          placeholder="First name"
          aria-label="First name"
        />
      </div>
      <div class="col-1 p-0">
        <button class="btn btn-primary">Нажать</button>
      </div>
      <ul class="form__list" style="height: 100px"></ul>
    </div>

    Код можно ещё оптимизировать... тут много чего можно улучшить. PS Приучайте себя нормально называть функции и классы, иначе получите от коллег выговор.

    → Ссылка