Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

192
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda