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

159
Visualizações
El detector de eventos no funciona después de que los elementos se procesan en el dom

Estoy creando un proyecto que cuando hago clic en una determinada tarjeta de categoría obtengo la identificación de esa categoría y redirijo a la pantalla de películas.

Soy consciente de que row.eventlistener() en index.js se ejecutará antes de que se representen los elementos y es por eso que no selecciona la identificación. ¿Cómo debo agregar el detector de eventos a cada elemento recién renderizado antes de agregarlo al contenedor para poder obtener la identificación de cada tarjeta de categoría?

índice.js

 async function getCategories() { let url = 'http://localhost:8080/movieCategories'; try { let res = await fetch(url); return await res.json(); } catch (error) { console.log(error); } } async function renderCategories() { let categories = await getCategories(); let html = ''; categories.forEach(category => { let htmlSegment = ` <div class="category-card" id=${category.id}> <img src="./assets/images/sci-fi.jpg" alt="" class="card-img"> <div class="name">${category.name}</div> </div> `; html += htmlSegment; }); let container = document.querySelector('.category-grid'); container.innerHTML = html; } renderCategories(); document.querySelectorAll('div.category-card').forEach(row=>{ row.addEventListener('click',event=>{ console.log('Category clicked', event.currentTarget.id) window.location= 'movies.html?categoryId=' +event.currentTarget.id; }); });

índice.html

 <section class="category" > <h2 class="section-heading">Category</h2> <div class="category-grid"> </div> </section>
about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

No está esperando la llamada a renderCategories , mueva su lógica de escucha de eventos dentro del método renderCategories O puede usar una expresión de función asíncrona invocada inmediatamente o IIAFE para abreviar, más sobre esto aquí expresión-función-asíncrona-invocada-inmediatamente :

 (async () => { await renderCategories(); document.querySelectorAll('div.category-card').forEach(row => { row.addEventListener('click', event => { console.log('Category clicked', event.currentTarget.id) window.location= 'movies.html?categoryId=' +event.currentTarget.id; }); }); })();
about 4 years ago · Juan Pablo Isaza Relatório

0

También puede simplemente agregar el evento en el div directamente cuando lo crea y pasar la identificación o lo que quiera.

 <div class="category-card" id=${category.id} onclick="onCatClick(${category.id})">

Después de esto, puede mover su lógica dentro de una función onCatClick de nivel superior.

 function onCatClick(id) { console.log('Category clicked', id) window.location= 'movies.html?categoryId=' + id; }

Esto es si su estilo/diseño no le permite usar un elemento de anclaje. De lo contrario, simplemente podría reemplazar el div con un elemento de anclaje:

 <a href="movies.html?categoryId=${id}"></a>
about 4 years ago · Juan Pablo Isaza Relatório

0

probar:

 async function getCategories() { let url = 'http://localhost:8080/movieCategories'; try { let res = await fetch(url); return await res.json(); } catch (error) { console.log(error); } } async function renderCategories() { let categories = await getCategories(); let html = ''; categories.forEach(category => { let htmlSegment = ` <div class="category-card" id=${category.id}> <img src="./assets/images/sci-fi.jpg" alt="" class="card-img"> <div class="name">${category.name}</div> </div> `; html += htmlSegment; }); let container = document.querySelector('.category-grid'); container.innerHTML = html; } //es8 await renderCategories(); // fix timeout async render element setTimeout(() => { document.querySelectorAll('div.category-card').forEach(row=>{ row.addEventListener('click',event=>{ console.log('Category clicked', event.currentTarget.id) window.location= 'movies.html?categoryId=' +event.currentTarget.id; }); }) });
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