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

183
Visualizações
Cómo hacer que el detector de eventos siga funcionando después de agregar elementos al DOM (js puro)

Tengo este oyente:

 //close all detail tags when click happens outside document.addEventListener('click', function(e) { if (!details.some(f => f.contains(e.target))) { details.forEach(f => f.removeAttribute('open')); } else { details.forEach(f => !f.contains(e.target) ? f.removeAttribute('open') : ''); } })

cierra automáticamente todas las etiquetas de detalles abiertas cuando se hace clic en una nueva o cuando hace clic en cualquier parte de la página, eso funciona bien. Los problemas surgen cuando se agrega dinámicamente una nueva etiqueta de detalle, entonces el oyente no funcionará para ellos. Estaba leyendo otras preguntas relacionadas y la delegación más sugerida, pero este no parece ser el caso porque el oyente también debería funcionar tanto para etiquetas normales como para etiquetas dinámicas.

Intenté algunas sugerencias como esta:

 document.addEventListener('click', function(e){ if(e.target && e.target.id== 'myDynamicallyAddedElementID'){ //my code } });

pero sin cambios. Puedes probarlo aquí https://jsfiddle.net/nxv03wjo/ y aquí https://jsfiddle.net/nxv03wjo/1/

¿Cuál es el truco aquí?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

¿Simplemente recuperar los elementos de details dentro del oyente de clics?

 document.addEventListener('click', function (e) { const details = [...document.querySelectorAll('details')]; if (!details.some(f => f.contains(e.target))) { details.forEach(f => f.removeAttribute('open')); } else { details.forEach(f => !f.contains(e.target) ? f.removeAttribute('open') : ''); } });
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