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

208
Vistas
Manejar el detector de eventos de clic en el evento de desplazamiento de la ventana

Apliqué el evento de desplazamiento de la ventana y luego obtengo elementos con document.querySelectorAll. Entonces, después de ejecutar esto, tengo NodeList. Estoy recorriendo esta lista de nodos con forEach. En forEach, estoy activando un evento de clic en el elemento. Pero mi evento de clic se activa varias veces. Cómo puedo manejarlo.

Nota: Ejecute este código en la página de inicio de vimeo. https://vimeo.com/home

 window.addEventListener("scroll",()=>{ var config = document.querySelectorAll("[data-config-url]"); config.forEach((item)=>{ item.addEventListener("click",(e)=>{ var configData = e.currentTarget.getAttribute("data-config-url"); console.log(configData); }); }); });

Quiero registrar los datos de configuración del artículo por única vez.

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

0

Como se indicó en mis comentarios anteriores, no pude encontrar el escenario que describiste en la URL https://vimeo.com/home . Ni siquiera al adoptar la simulación de pantalla móvil. Estoy usando Firefox 101.0.1 (64 bits) en Windows 10 en este momento.

document.querySelectorAll("[data-config-url]").length siempre devuelve cero y eso es cierto también después de intentar navegar por la página, desplazarse, abrir bloques de menú, etc. No inicié sesión porque no tengo una cuenta y no especificaste cómo se supone que se debe visitar la página más allá de la propia URL.

De todos modos, cuando se golpea el escenario, ese es el código que implementa la lógica que sugerí en mis comentarios. Acabo de modificar ligeramente su código para que el controlador se agregue solo si el elemento no se procesó previamente.

Luego repite la operación una vez cada 500ms:

 setInterval(scanPageAndAddHandlers, 500); function scanPageAndAddHandlers(){ console.log('scanning...'); var config = document.querySelectorAll("[data-config-url]"); config.forEach((item)=>{ if (item.dataset.handlerWasAdded != 'true'){ //add the listener for the click event to the item element item.addEventListener("click",(e)=>{ var configData = e.currentTarget.getAttribute("data-config-url"); console.log(configData); }); //mark this item as processed item.dataset.handlerWasAdded = 'true'; } }); }

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