сохраненные данные в локальном хранилище, их извлечение и отображение с помощью Java Script

#javascript #html

#javascript #HTML

Вопрос:

Я пытаюсь сохранить пользовательский ввод в локальном хранилище, затем извлечь его и отобразить с помощью JavaScript. Я получаю сообщения об ошибках:

Не удается прочитать свойство 'innerHTML' null

и

key не определено

 <body>
    <fieldset>
        <legend>Insert Data</legend>
            <input type="text" id="inputKey" placeholder="enter key">
            <input type="text" id="inputValue" placeholder="enter value">
            <button type="submit" id="insertBtn">Insert Data</button>
    </fieldset>
    <fieldset>
       <legend>local Storage</legend>
       <h3 id="lsOutput"></h3>
    </fieldset>

<script>

let inputKey = document.getElementById('inputKey');
let inputValue = document.getElementById('inputValue');
let inputButton = document.getElementById('insertBtn');
let output = document.getElementById('IsOutput');
inputButton.addEventListener("click", store);
function store(){
     const key = inputKey.value;
     const value = inputValue.value;

  if( key amp;amp; value){

      localStorage.setItem(key, value);

    //   location.reload();   
  }
}
  for(const i = 0 ; i < localStorage.length; i  ){
      const getKey = localStorage.key(i);
      const getValue = localStorage.getItem(key);
      output.innerHTML  = `${getKey}: ${getValue}`;
  }
</script>
</body>
</html>

 

Комментарии:

1. В вашем коде есть несколько ошибок и ошибок. Пожалуйста, попробуйте отладить его и включите свои попытки здесь. Для этого прочитайте idownvotedbecau.se/nodebugging и idownvotedbecau.se/nomcve

2. Спасибо. я пройду через это.

Ответ №1:

Вам просто нужно изменить ключ на переменную getKey:

 const getKey = localStorage.key(i);
const getValue = localStorage.getItem(getKey);
 

Ответ №2:

несколько ошибок:
IsOutput вместо lsOutput
Вы должны проверить undefined значение в javascript ( key и value )
В цикле i , которое не может быть константой (потому что вы увеличиваете его …)

 <html>
<head> 
</head>    
<body>
    <fieldset>
        <legend>Insert Data</legend>
        <input type="text" id="inputKey" placeholder="enter key">
        <input type="text" id="inputValue" placeholder="enter value">
        <button type="submit" id="insertBtn">Insert Data</button>
    </fieldset>
    <fieldset>
        <legend>local Storage</legend>
        <h3 id="lsOutput"></h3>
    </fieldset>

    <script>
        let inputKey = document.getElementById('inputKey');
        let inputValue = document.getElementById('inputValue');
        let inputButton = document.getElementById('insertBtn');
        let output = document.getElementById('lsOutput');
        inputButton.addEventListener("click", store);
        function store() {
            const key = inputKey.value;
            const value = inputValue.value;

            if (key != "undefined" amp;amp; value != "undefined" ) {

                localStorage.setItem(key, value);

                for (let i = 0; i < localStorage.length; i  ) {
                    const getKey = localStorage.key(i);
                    const getValue = localStorage.getItem(key);
                    output.innerHTML  = `${getKey}: ${getValue}`;
                }
            }
        }
    </script>
</body>

</html>

 

Ответ №3:

 const getKey = localStorage.key(i);
 

Я думаю, вы не можете этого сделать, потому что key не является методом объекта localStorage,

Можно использовать только GetItem, setItem, removeItem и clear

https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

Ответ №4:

вероятно, вы хотите использовать GetItem (ключ)

   for(let i = 0 ; i < localStorage.length; i  ){
      const getKey = localStorage.getItem(key[i]);
      const getValue = localStorage.getItem(key);
      output.innerHTML  = `${getKey}: ${getValue}`;
  }
 

Обратите внимание, что я также немного изменил ваш цикл. Здесь следует использовать let , а не const , так как переменная будет увеличиваться в каждом цикле. кроме того, вы хотите использовать скобки при получении определенного элемента в цикле, а не в параграфах.

кроме того, как только у вас есть свой ключ, у вас также есть свое значение.

Рассмотрим это:

 localStorage.setItem('some key', 'some value');
const item = localStorage.getItem('some key');
console.log(item);
// -> 'some value'
 

Ответ №5:

У вас есть опечатка в вашем HTML, в вашем JavaScript вы ищете идентификатор IsOutput , но называете свой элемент lsOutput . Помните, что запрос на несуществующие элементы возвращает null.

Кроме того, попробуйте использовать getItem вместо key

Ответ №6:

 Cannot read property 'innerHTML' of null
 

Это связано с тем, что ваш элемент недоступен. Вместо IsOutput появляется ошибка типа LsOutput

Также проверьте эту строку, кажется неправильной?

   for(const i = 0 ; i < localStorage.length; i  ){
      const getKey = localStorage.key(i);
      const getValue = localStorage.getItem(key); 
     //above line seems wrong instead of key it should be getKey 
      output.innerHTML  = `${getKey}: ${getValue}`;
  }
 

Проблема заключается в том, что ваша ошибка типа LsOutput вместо IsOutput, т.е. Не является LS

Комментарии:

1. Storage.prototype.key на самом деле существует; просто попробовал это в моей консоли браузера