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

290
Vistas
¿Por qué compositePath arroja una excepción cuando un atributo no existe, pero funciona cuando existe?

Tengo un detector de eventos para click en eventos en el document y estoy usando composedPath para determinar si algo en la ruta incluye un determinado atributo.

Si algo en la ruta incluye un atributo que escucho, entonces todo está bien y todo funciona.

Sin embargo, si algo en la ruta no incluye un atributo que escucho, arroja una excepción:

"TypeError no detectado: el.hasAttribute no es una función"

Aquí hay un violín que muestra esto:

 document.addEventListener('click', (event) => { const includesAttribute = event.composedPath().some((el) => el.hasAttribute('my-attribute')); console.log(`has attribute: ${includesAttribute}`); });
 <button my-attribute>click me, I log true and work fine</button> <br/> <button other-attribute>click me, I throw an exception because I don't have the attribute</button>

¿Por qué obtengo una excepción solo cuando el atributo no existe? ¿No debería estar siempre disponible el método hasAttribute ?

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

0

Porque eldocument no tiene el método getAttribute . Su llamada a some está llegando hasta el final para document cuando no encuentra nada; vea el registro de nodeName aquí:

 document.addEventListener('click', (event) => { const includesAttribute = event.composedPath().some((el) => { console.log(el.nodeName); return el.hasAttribute('my-attribute'); }); console.log(`has attribute: ${includesAttribute}`); });
 <button my-attribute>click me, I log true and work fine</button> <br/> <button other-attribute>click me, I throw an exception but now you can see why</button>

Solo agrega un guardia:

 document.addEventListener('click', (event) => { const includesAttribute = event.composedPath().some((el) => el.hasAttribute && el.hasAttribute('my-attribute')); console.log(`has attribute: ${includesAttribute}`); }); 

 document.addEventListener('click', (event) => { const includesAttribute = event.composedPath().some((el) => el.hasAttribute && el.hasAttribute('my-attribute')); console.log(`has attribute: ${includesAttribute}`); });
 <button my-attribute>click me, I log true and work fine</button> <br/> <button other-attribute>click me, I do not throw an exception anymore</button>

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