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

172
Vistas
¿Cómo evitar que se haga clic en el elemento secundario?

Tengo un problema con el evento de clic que se recibe en el elemento secundario en lugar del elemento principal. En este momento, el evento de clic está ocurriendo en el elemento de span en lugar del elemento de enlace.

Busqué algunas preguntas SO similares y descubrí EventBubling y cómo prevenirlo, pero desafortunadamente, no funcionó para mí.

HTML

 <div class="container"> <div class="list"> <a href="#" data="data-1"> <span>Text 1</span> </a> </div> <div class="list"> <a href="#" data="data-2"> <span>Text 2</span> </a> </div> <div class="list"> <a href="#" data="data-3"> <span>Text 3</span> </a> </div> </div>

JS

 const list = document.querySelectorAll('.list > a'); Array.from(list).forEach((el) => el.addEventListener('click', (e) => { //e.preventDefault(); e.stopPropagation(); const dataAttr = e.target.getAttribute('data'); console.log(dataAttr); }) );
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Utilice e.currentTarget en lugar de e.target .

 e.currentTarget.getAttribute('data');

Lea también: ¿Cuál es la diferencia exacta entre la propiedad currentTarget y la propiedad de destino en JavaScript?

Como se explica en la respuesta anterior:

target es el elemento que activó el evento (p. ej., el usuario hizo clic en Blockquote) currentTarget es el elemento al que se adjunta el detector de eventos.

Código de trabajo a continuación

 const list = document.querySelectorAll('.list a'); //console.log(list); Array.from(list).forEach((el) => el.addEventListener('click', (e) => { //e.preventDefault(); e.stopPropagation(); const dataAttr = e.currentTarget.getAttribute('data'); console.log(dataAttr); }) );
 <div class="list"> <a href="#" data="data-1"> <span>Text 1</span> </a> </div> <div class="list"> <a href="#" data="data-2"> <span>Text 2</span> </a> </div> <div class="list"> <a href="#" data="data-3"> <span>Text 3</span> </a> </div>

about 4 years ago · Juan Pablo Isaza Denunciar

0

La propagación funciona de manera diferente a lo que crees.

Lo que desea es obtener siempre la etiqueta .closest() a , independientemente del elemento secundario en el que haya hecho clic. Y luego obtienes su atributo de datos

 const list = document.querySelectorAll('.list > a'); Array.from(list).forEach((el) => el.addEventListener('click', (e) => { //e.preventDefault(); e.stopPropagation(); const dataAttr = e.target.closest('a').getAttribute('data'); console.log(dataAttr); }) );
 <div class="container"> <div class="list"> <a href="#" data="data-1"> <span>Text 1</span> </a> </div> <div class="list"> <a href="#" data="data-2"> <span>Text 2</span> </a> </div> <div class="list"> <a href="#" data="data-3"> <span>Text 3</span> </a> </div> </div>

about 4 years ago · Juan Pablo Isaza Denunciar

0

Dado que los enlaces que está agregando a los controladores de eventos no tienen nada dentro de ellos, excepto el elemento de intervalo, supondré que en realidad no desea evitar los clics en el intervalo. En su lugar, desea saber en qué enlace se hizo clic, incluso si el clic fue realmente en el lapso.

Utilice currentTarget en lugar de target .

currentTarget le dará el elemento al que está vinculado el controlador de eventos en lugar del elemento que realmente recibió el clic.

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