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

108
Visualizações
Apuntar a un enlace secundario en un menú de navegación

Estoy creando una navegación desplegable para dispositivos móviles y estoy usando una clase activa para ocultar y mostrar submenús a través de CSS. El siguiente código funciona para el elemento de la lista inicial, pero cierra el elemento principal tan pronto como intento abrir un elemento de la lista secundaria en el submenú (que usa la misma estructura y clases)

lo que creo que está pasando

Creo que el problema es que tan pronto como hago clic dentro del li principal, js registra el evento de clic y se cierra a través de la palanca.

Problema

Entonces, ¿cómo obtengo el javascript para seleccionar el enlace secundario y adjuntar el evento de clic a eso, pero aún así agregar la clase activa al elemento li principal para que el CSS caiga en cascada a través de los submenús?

HTML:

 <ul> <li class="menu-item-has-children nav-level-0"> <a class="#">Child link</a> <ul class="submenu"></ul> </li> <li class="menu-item-has-children nav-level-0"> <a class="#">Child link</a> <ul class="submenu"></ul> </li> </ul>

JavaScript:

 var nav_link = document.querySelectorAll(".menu-item-has-children"); for (var i = 0; i < nav_link.length; i++) { nav_link[i].addEventListener("click", function() { this.classList.toggle('active'); }); }
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Entonces, ¿cómo obtengo el javascript para seleccionar el enlace secundario y adjuntar el evento de clic a eso, pero aún así agregar la clase activa al elemento li principal para que el CSS caiga en cascada a través de los submenús?

Prueba esto

 var nav_link = document.querySelectorAll(".menu-item-has-children"); for (var i = 0; i < nav_link.length; i++) { nav_link[i].querySelector('a').addEventListener("click", function () { this.parentElement.classList.toggle('active'); }); }
about 4 years ago · Juan Pablo Isaza Relatório

0

Estoy escribiendo esto como una solución cruda. Tal vez puedas implementar esto usando un foreach. Sin embargo, el problema al que se enfrenta se debe al burbujeo de eventos. Debe detener el clic realizado en el submenú para propagar al padre (lo que activa la alternancia de la clase activa, por lo tanto, oculta el elemento.

Agregue esto a su javascript

 var submenu = document.querySelectorAll(".submenu"); for (var i = 0; i < submenu.length; i++) { submenu[i].addEventListener("click", function(event) { event.stopPropagation() }); }

Sin embargo, esta solución no agrega/elimina la clase activa al submenú, en caso de que tenga que expandir eso. Sugiero usar una clase de selector común para hacer eso

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