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

263
Vistas
El botón Editar para editar una tarea en una lista de tareas pendientes no funciona correctamente

Estoy haciendo su típico proyecto de práctica de lista de tareas pendientes, que está estructurado de una manera con la que la mayoría de ustedes probablemente estén familiarizados.

Tiene proyectos, y dentro de cada proyecto el usuario agrega tareas a través de un formulario emergente. cada tarea tiene un botón para eliminar o editar la tarea específica.

Cuando el usuario hace clic en editar en una tarea, se hace visible un formulario emergente con toda la información actual de la tarea, que se puede editar.

Al enviar el formulario emergente, funciona como se esperaba, actualizando la información, pero solo para la primera tarea que se edita. Las ediciones posteriores de diferentes tareas también editan aquellas que fueron editadas previamente.

Sé que esto tiene que ver con el detector de eventos para enviar el formulario emergente. La función en la que se declara el detector de eventos acepta un ID como argumento que identifica la tarea individual que se está editando. Parece que el detector de eventos se ejecuta para todas las tareas en las que se ha llamado previamente.

Esta función se llama a través del evento de clic del botón de edición.

Entiendo un poco lo que está sucediendo aquí, pero tengo dificultades para encontrar una solución.

¿Cómo puedo asegurarme de que el detector de eventos para enviar el formulario solo se ejecute para un elemento a la vez?

 let edit = document.createElement('button'); edit.textContent = 'Edit'; edit.classList.add('edit'); edit.id = `edit-${item.id}`; edit.addEventListener('click', (e) => { let taskId = document.getElementById(e.target.id).parentNode.id; setEditTaskFields(taskId); setEditTaskEvents(taskId); }) function setEditTaskEvents(taskId) { const project = selectDisplayedProject() const byId = project.items.map(e => e.id); const task = selectDisplayedProject().items.filter(task => task.id == taskId)[0]; document.getElementById('edit-task-form').addEventListener('submit', ()=> { let title = document.querySelector('#edit-task-form #title').value; let description = document.querySelector('#edit-task-form .description').value; let dueDate = document.querySelector('#edit-task-form #due-date').value; document.querySelectorAll('#edit-task-form .priority-container input').forEach(radio => { if (radio.checked) project.items[byId.indexOf(taskId)] = Item(title, description, dueDate, radio.value, selectDisplayedProject()); }); displayProject(selectDisplayedProject()); document.querySelector('.edit-task-popup').style.display = 'none'; })
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Pude solucionarlo clonando el formulario y eliminando todos los detectores de eventos cada vez que se crea uno.

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