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

193
Vistas
la activación del evento se incrementa cada vez que se vuelve a abrir el cajón

Creé este código de prueba para probar el problema al que me enfrento, aquí cuando hacemos clic en cualquiera de los botones, abre un cajón de prueba, y dentro del cajón de prueba cuando hacemos clic en el texto, la consola registra el texto, pero después de eso cuando cerramos el cajón con el botón de cerrar dentro del cajón y abre un nuevo cajón, el registro de la consola se dispara 2 veces y el número sigue aumentando las veces que abrimos y volvemos a abrir el cajón, ¿por qué sucede esto? ¿Cómo resolverlo?

 const test_modal = document.querySelector('.test-modal'); document.addEventListener('click', (e) => { if(e.target.classList.contains('btn')) { e.preventDefault(); const value = e.target.closest('.btn').getAttribute("data-name"); showmodal(value); } }) function showmodal(value) { test_modal.innerHTML = ` <div class="inner-test"><h3 class="heading-test">${value}</h3><button class="closeme">Close</button></div> `; document.addEventListener('click', (e) => { if(e.target.classList.contains('heading-test')) { console.log(e.target); } }) } document.addEventListener('click', (e) => { if(e.target.classList.contains('closeme')) { test_modal.innerHTML = ``; } })
 .inner-test { background: tomato; width: 80px; height: 80px; }
 <button data-name="first" class="btn"> I am First </button> <button data-name="second" class="btn"> I am Second </button> <button data-name="third" class="btn"> I am Third </button> <div class="test-modal"> </div>

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

0

Debe eliminar el detector de eventos de clic cuando cierre el modal.

 const test_modal = document.querySelector('.test-modal'); document.addEventListener('click', (e) => { if(e.target.classList.contains('btn')) { e.preventDefault(); const value = e.target.closest('.btn').getAttribute("data-name"); showmodal(value); } }) let clickHandler; function showmodal(value) { test_modal.innerHTML = ` <div class="inner-test"><h3 class="heading-test">${value}</h3><button class="closeme">Close</button></div> `; clickHandler = (e) => { if(e.target.classList.contains('heading-test')) { console.log(e.target); } } document.addEventListener('click', clickHandler ) } document.addEventListener('click', (e) => { if(e.target.classList.contains('closeme')) { document.removeEventListener('click', clickHandler) test_modal.innerHTML = ``; } })
 .inner-test { background: tomato; width: 80px; height: 80px; }
 <button data-name="first" class="btn"> I am First </button> <button data-name="second" class="btn"> I am Second </button> <button data-name="third" class="btn"> I am Third </button> <div class="test-modal"> </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