Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

107
Views
¿Por qué el almacenamiento local elimina datos con casillas de verificación alternadas?

Estoy tratando de hacer una lista de cosas por hacer. Estoy en medio de un proceso y tengo el siguiente problema:

  1. Hago un todo desde la entrada a una página - funciona bien.
  2. Guardo todo en el almacenamiento local, funciona bien.
  3. Cargo todos desde el almacenamiento local: funciona bien, PERO cuando marco una casilla de verificación en un todo y actualizo la página, el almacenamiento local elimina ese todo en particular. No puedo entender lo que está pasando

HTML:

 <body> <ul id="list"> </ul> <form action="submit" id="task-form"> <input type="text" placeholder="Type your task here and click 'Add a Task'" id="task-input"> <button type="submit" id="add-button" > Add a Task </button> </form> <template id="template"> <li class="list-item" data-todo-id=""> <label class="list-item-label"> <input type="checkbox" id="checkbox"> <span list-item-text> Task text is here </span> </label> <button type="button"> Delete </button> </li> </template> </body>

JS:

 let button = document.querySelector('#add-button') let todoInput = document.querySelector('#task-input') let template = document.querySelector('#template') let list = document.querySelector('#list') let LOCAL_STORAGE_PREFIX = 'TO-DO LIST APP' let LOCAL_STORAGE_KEY = `${LOCAL_STORAGE_PREFIX}-todos` let todos = []; let savedTodos = loadTodo(); savedTodos.forEach(renderTodo) button.addEventListener('click', e =>{ e.preventDefault(); let date = new Date; let todo = { name : todoInput.value, complete : false, id : date.valueOf() } todos.push(todo) saveTodo(); renderTodo(todo) console.log(todo) todoInput.value = '' }) function renderTodo(todoName){ let templateClone = template.content.cloneNode(true) let todoText = templateClone.querySelector('[list-item-text]') todoText.innerText = todoName.name list.appendChild(templateClone) } function saveTodo(){ localStorage.setItem(LOCAL_STORAGE_KEY,JSON.stringify(todos)) } function loadTodo(){ return JSON.parse(localStorage.getItem(LOCAL_STORAGE_KEY)) || [] }
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

La casilla de verificación no tiene ningún controlador de eventos adjunto, por lo que marcarla o desmarcarla no tendrá ningún efecto en todos. Sin embargo, tiene un error en su código, lo que provocará que todos sus todos guardados anteriormente se eliminen si agrega uno nuevo. Lo de la casilla de verificación, creo que fue una coincidencia.

 let todos = []; let savedTodos = loadTodo();

Aquí se están creando dos matrices diferentes, savedTodos contiene las listas de tareas pendientes analizadas desde el almacenamiento local. Y una matriz vacía llamada todos . La lista de todos en SavedTodos también se agrega a dom en la siguiente línea.

Hasta aquí todo bien..

 ... todos.push(todo) saveTodo(); renderTodo(todo) ...

Sin embargo, en su función addTodo (controlador de eventos de agregar botón), cuando agrega una nueva tarea, se agrega a la matriz de todos (actualmente vacía) y luego también se vuelve a escribir en el almacenamiento local. En este punto, los todos existentes se mostrarán en DOM, pero se eliminarán del almacenamiento local. Cuando actualice la página, solo se mostrarán los Todos agregados en la última sesión.

Para solucionar esto, recomiendo fusionar la matriz de todos y los savedTodos , y tener solo uno de esos.

 ... let allTodos = loadTodo(); allTodos.forEach(renderTodo) // in addTodo function (add button event handler) ... allTodos.push(todo); ... // in saveTodo function localStorage.setItem(LOCAL_STORAGE_KEY,JSON.stringify(allTodos));
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!