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

264
Vistas
Hacer clic fuera del elemento con JavaScript e.target no funciona

Estoy creando un mega menú que tiene un botón de cierre en cada menú que funciona muy bien. Sin embargo, necesito escribir algo de JavaScript que diga: 'si hace clic fuera de un mega menú cuando está abierto, ciérrelo'.

He escrito un guión a continuación. Detecta cuando un usuario hace clic dentro del mega menú, pero no cuando hace clic fuera de él. En este caso, eliminar la clase display-on que hace que un elemento tenga display: block; .

 const dropDownMenu = document.getElementsByClassName("drop-down"); for (let i = 0; i < dropDownMenu.length; i++) { dropDownMenu[i].addEventListener("click", (e) => { // If clicking in any area that has drop-down class, do nothing. if (dropDownMenu[i].contains(e.target)) { console.log("clicked in mega menu area"); // If clicking in any area outside drop-down class, remove display-on class which closes the menu. } else { console.log("clicked outside mega menu area"); document.querySelector(".display-on").classList.remove("display-on"); } }); }

Demostración de trabajo si es necesario se puede ver aquí .

Gracias.

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

0

Del comentario anterior...

"Por supuesto, el OP necesita registrar el manejo de eventos 'fuera del menú desplegable' también fuera de cualquier elemento clasificado drop-down . document.body podría ser el elemento correcto para escuchar".

... algo como esto ...

 function handleDropDownMenuBehavior(evt) { if (evt.target.closest('.drop-down') === null) { document.querySelector(".display-on").classList.remove("display-on"); console.log("clicked outside mega menu area"); } else { console.log("clicked in or at mega menu area"); } } document.body.addEventListener('click', handleDropDownMenuBehavior);
about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede agregar un detector de eventos global al documento que verifique si lo que se hizo clic no es el mega menú. avísame si necesitas ayuda adicional :)

 document.onclick = (e) => { if (e.target.contains(document.getElementsByClassName("drop-down")[0])) { console.log('close mega menu'); document.getElementsByClassName("drop-down")[0].classList.remove("display-on"); } }
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