Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

138
Vistas
Obtención del hijo del padre único de la casilla de verificación marcada en JavaScript (o hermano de la casilla de verificación marcada)

Estoy creando una aplicación de tareas pendientes en JavaScript vainilla.

Estoy almacenando la identificación y el valor de cada tarea pendiente en el almacenamiento local. Así como un valor booleano que especifica si la casilla de verificación correspondiente de la tarea pendiente se marcó o no.

Esto funciona perfectamente siempre que no se haya hecho clic en ninguna casilla de verificación.

Aquí hay un ejemplo de cómo se ve el almacenamiento local:

 "{\"toDo1630557891826\":\"Clean bedroom false\",\"toDo1630557898808\":\"Wash dishes false\"}"

Sin embargo, tan pronto como se marca una casilla de verificación, el valor más reciente en el árbol DOM se coloca junto a ambos identificadores de tareas en el almacenamiento local. Por ejemplo, cuando marco ambas casillas de verificación en el DOM.

Esto es lo que quiero decir -

 {ToDos: "{\"toDo1630557891826\":\"Wash dishes true\",\"toDo1630557898808\":\"Wash dishes true\"}", length: 1}

Creo que la razón por la que esto sucede es porque cuando estoy almacenando los valores de tareas pendientes verificados, solo estoy recuperando el último valor de tareas pendientes en el DOM:

 toDoContainer.addEventListener("change", (e) => { const tgt = e.target; const toDo = tgt.parentNode.querySelector('.input'); if (tgt.checked) { toDo.style.textDecoration = "line-through"; toDo.style.opacity = "50%"; isChecked(toDo.value); } else { toDo.style.textDecoration = "none"; toDo.style.opacity = "100%"; isChecked(toDo.value); } });

Esta línea de código específicamente está causando este problema:

 const toDo = tgt.parentNode.querySelector('.input');

Como dije antes, esto está obteniendo el último valor .input (todo). Necesito almacenar el valor correspondiente para cada casilla de verificación marcada sin sobrescribir otros valores de tareas pendientes en el almacenamiento local.

Por lo tanto, necesito almacenar de alguna manera el valor de cada tarea pendiente accediendo al hermano del valor de tarea pendiente de la casilla de verificación.

No estoy seguro de cómo hacer esto.

Aquí está mi codepen para más contexto. Por supuesto, no hay almacenamiento local.

https://codepen.io/harri-greeves/pen/LYLEKNj

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Es probable que debas considerar esto:

 toDoContainer.addEventListener("change", (e) => { const tgt = e.target; const chk = tgt.checked; toDo.style.textDecoration = chk ? "line-through" : "none"; toDo.style.opacity = chk ? "50%" : "100%"; saveTodos() }); const saveToDos = () => { // change the global todo object (and make it an array) toDos = [...toDoContainer.querySelectorAll("input[type=checkbox]")].map(todo => { const checked = todo.checked const id = todo.closest("div").id; return { id,completed:checked } }); localStorage.setItem("ToDos", JSON.stringify(toDos)); };
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda