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

172
Views
Marcar una casilla de verificación y aplicar el estilo al valor de entrada correspondiente

Estoy creando una lista de tareas pendientes en JavaScript vainilla. En este momento, estoy tratando de aplicar un estilo a una tarea pendiente cuando la casilla de verificación correspondiente está marcada.

 toDoContainer.addEventListener("change", function(e) { const tgt = e.target; if (tgt.classList.contains("checkbox")) { let toDo = tgt.closest("input").classList.contains("input"); if (toDo.value !== "") { toDo.style.opacity = "50%"; } } });

Tal como está, nada está sucediendo visiblemente y no estoy recibiendo un error.

Estoy usando el método más cercano () porque la casilla de verificación y el todo son entradas que están una al lado de la otra en el DOM.

Antes estaba usando este código -

 allCheckboxes.forEach(box => { box.addEventListener("change", () => { if (box.checked) { for (let toDo = 0; toDo < allToDos.length; toDo++) { if (allToDos[toDo].value) { allToDos[toDo].style.textDecoration = "line-through"; allToDos[toDo].style.opacity = "50%"; } } } else { console.log("cat"); for (let toDo = 0; toDo < allToDos.length; toDo++) { if (allToDos[toDo].value) { allToDos[toDo].style.textDecoration = "none"; allToDos[toDo].style.opacity = "100%"; } } } }) })

Pude aplicar los estilos a las entradas, pero solo cuando se marcó la primera casilla de verificación en la lista de nodos. Al marcar la casilla de verificación, también se aplicaron los estilos a todos los todos en el DOM, no solo al correspondiente, que es lo que quiero.

Otra peculiaridad que acabo de notar es que cuando miro las herramientas de desarrollo para ver si está registrando las casillas de verificación, muestra una lista de nodos vacía: [] cuando hay varias casillas de verificación visibles.

 document.getElementById("add").addEventListener("click", () => { console.log(allCheckboxes); });

¿Cómo puedo aplicar estilo solo a la tarea pendiente correspondiente cuando una casilla de verificación está marcada?

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

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Estoy usando el método más cercano () porque la casilla de verificación y el todo son entradas que están una al lado de la otra en el DOM.

El método más cercano busca el elemento mismo y luego busca los ancestros del elemento, moviéndose hacia arriba en el árbol dom.

No creo que .closest se pueda usar para apuntar a hermanos.

https://api.jquery.com/más cercano/

about 4 years ago · Juan Pablo Isaza Report

0

El problema está en línea:

const allCheckboxes = toDoContainer.querySelectorAll("[type=checkbox]");

querySelector devuelve una colección html no viva. Significa que no incluirá todos agregados dinámicamente.

La mejor manera es escuchar el nodo principal: todoContainer y luego manipular el estado.

about 4 years ago · Juan Pablo Isaza Report

0

añadir esta función

 function ChangeOpacity() { let checkbox = document.getElementsByClassName("checkbox"); let input = document.getElementsByClassName("input"); for (let i = 0; i < checkbox.length; i++) { checkbox[i].addEventListener("change",()=>{ if (checkbox[i].checked == true) { if (input[i].value) { input[i].style.opacity = "50%" input[i].style.textDecoration = "line-through" } else{ input[i].style.opacity = "100%" input[i].style.textDecoration = "none" } } else { if (input[i].value) { input[i].style.opacity = "50%" input[i].style.textDecoration = "line-through" } else{ input[i].style.opacity = "100%" input[i].style.textDecoration = "none" } } }) } } ChangeOpacity()

y luego llame a esta función a la función createToDo , todo debería funcionar bien y es más limpio de esta manera

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!