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

176
Vistas
¿Cómo crear una función de eliminación para la aplicación de lista de tareas de vanillajs?

¡Buenos días! He estado tratando de descubrir cómo crear una función de eliminación en mi aplicación de tareas pendientes. No sé qué hacer a continuación y la función de eliminación y eventListener no son correctas. Espero que puedan ayudarme. Quiero entender completamente cada pequeño proyecto que hago. ¡Gracias de antemano! :)

 const inputBox = document.querySelector('.input') const addBtn = document.querySelector('.input-button') const todoMain = document.querySelector('.todo-list') const deleteBtn = document.querySelector('.delete-button') const deleteAllBtn = document.querySelector('.clear-all') //Event listeners inputBox.addEventListener("keyup", function(){ let userInput = inputBox.value; if (userInput.trim() != 0) { addBtn.classList.add("active") } else { addBtn.classList.remove("active"); } }) addBtn.addEventListener("click", todoAdd); todoMain.addEventListener("click", todoDelete); // Functions function todoAdd(event){ event.preventDefault(); const todoLi = document.createElement('li'); todoLi.innerText = inputBox.value; const todoDeleteBtn = document.createElement('button'); todoDeleteBtn.innerHTML = `<i class="fas fa-trash-alt"></i>`; todoDeleteBtn.classList.add('delete-button') todoLi.appendChild(todoDeleteBtn); todoMain.appendChild(todoLi); inputBox.value = ''; addBtn.classList.remove("active"); }; function todoDelete(e){ const item = e.target; if (item.classList[0] === 'delete-button'){ todoMain.removeChild(todoLi); } }
 <link crossorigin rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" /> <div class="container"> <h1>TODO list</h1> <div class="input-container"> <input type="text" class="input" placeholder="Input Text Here"> <button class="input-button"><i class="fas fa-plus"></i></button> </div> <ul class="todo-list"> </ul> <div class="footer"> <span>You have<span class="pending">0</span>pending task left</span> <button class="clear-all">Clear All</button> </div> </div>

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

0

Hay un par de problemas que podrían estar impidiendo que esto funcione:

  1. Su función todoDelete intenta acceder a la variable todoLi , que no existe en su alcance. Usted define esto dentro de todoAdd , pero su alcance es limitado, por lo que no puede acceder a la variable desde fuera de la función.

Sospecho que lo que podría querer hacer es pasar item en su lugar.

  1. Adjunta el detector de eventos que activa todoDelete a su elemento todoMain , lo que significa que e.target para la función siempre será el elemento ul , no su elemento de lista. Su if siempre es falso, por lo que el código nunca se ejecuta.

Para solucionar esto, adjunte el detector de eventos a todoDeleteBtn en su función todoAdd en su lugar.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Lo he implementado simplemente como un ejemplo.

Al crear el elemento ToDo, agrego una clave para el texto y un atributo de datos para el botón Eliminar y un evento onclick.

La clave es importante para tener la relación entre el botón y el texto. Primero usé new Date() pero actualicé con un método aleatorio. (Math.random()+1).toString().split('.')[1];

Para deleteAll() puede obtener el nodo principal completo y establecer html en una cadena vacía.

 const inputBox = document.querySelector('.input') const addBtn = document.querySelector('.input-button') const todoMain = document.querySelector('.todo-list') const deleteBtn = document.querySelector('.delete-button') const deleteAllBtn = document.querySelector('.clear-all') //Event listeners inputBox.addEventListener("keyup", function(){ let userInput = inputBox.value; if (userInput.trim() != 0) { addBtn.classList.add("active") } else { addBtn.classList.remove("active"); } }) addBtn.addEventListener("click", todoAdd); todoMain.addEventListener("click", todoDelete); // Functions function todoAdd(event){ event.preventDefault(); const todoLi = document.createElement('li'); const key =(Math.random()+1).toString().split('.')[1]; todoLi.innerText = inputBox.value; todoLi.setAttribute("id", key); const todoDeleteBtn = document.createElement('button'); todoDeleteBtn.innerHTML = `<i class="fas fa-trash-alt"></i>`; todoDeleteBtn.classList.add('delete-button') todoDeleteBtn.onclick = function() { const _key = this.getAttribute('data-key') document.getElementById(_key).remove(); this.remove() } todoDeleteBtn.setAttribute("data-key", key); todoLi.appendChild(todoDeleteBtn); todoMain.appendChild(todoLi); inputBox.value = ''; addBtn.classList.remove("active"); }; function todoDelete(e){ const item = e.target; if (item.classList[0] === 'delete-button'){ todoMain.removeChild(todoLi); } }
 <link crossorigin rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" /> <div class="container"> <h1>TODO list</h1> <div class="input-container"> <input type="text" class="input" placeholder="Input Text Here"> <button class="input-button"><i class="fas fa-plus"></i></button> </div> <ul class="todo-list"> </ul> <div class="footer"> <span>You have<span class="pending">0</span>pending task left</span> <button class="clear-all">Clear All</button> </div> </div>

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