Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

217
Views
Visualización de elementos de alternancia de Javascript

Tengo un sitio web con un elemento de menú en una cuadrícula de encabezado y cuando la página se muestra por primera vez, el menú está visible. Tengo un elemento de hamburguesa que quiero usar para alternar la visualización del menú cuando se hace clic en él.

El CSS para el menú es:

 /*==================================================================*/ /* NAVIGATION */ .main-nav { grid-area: N; text-transform: uppercase; } /* Style the nav links */ .main-nav ul { display: grid; grid-template-columns: repeat(4,20vw); } .main-nav li { /* No bullets */ text-align: center; list-style-type: none; min-width: 20vw; } .main-nav a { /* Not italic unlike all other a elements */ text-decoration: none; font-style: normal; }

La hamburguesa usa una función javascript:

 /* Toggle between showing and hiding the navigation menu links when the user clicks on the hamburger menu / bar icon */ function toggleMenu() { let menu = document.getElementById("main-nav"); if (menu.display == "none"){ alert("Hidden"); menu.style.display = "grid"; } else { alert("Displayed"); menu.style.display = "none"; } };

Cuando se carga la página, esta función se usa en el detector de eventos de clic de la hamburguesa:

 document.getElementById("hamburger").addEventListener("click", toggleMenu);

Ahora, lo que sucede es esto: la página se carga, el menú está visible:

Página cuando se carga primero

Hago clic en la hamburguesa, la alerta me dice que el menú está actualmente visible:

Alerta que se muestra

Entonces el menú está oculto:

Página con menú oculto

Sin embargo, si ahora vuelvo a hacer clic en la hamburguesa, aparece un mensaje que me dice que se muestra el menú (!) y no vuelve a aparecer:

Menú aparentemente mostrado pero no visible

Entonces, lo que no entiendo es por qué el estilo del elemento. el estado de visualización es incorrecto cuando el menú muestra claramente: ninguno;?

Por supuesto, esto significa que la función no vuelve a mostrar el menú porque la verificación de estado es incorrecta.

Si necesita más código, hágamelo saber, pero por lo que puedo ver, todo el código involucrado está en la pregunta.

Gracias por adelantado,

Dermot

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Al final, fue un simple error dejar de lado .style según el comentario de Simon K:

 if (menu.style.display == "none"){ alert("Hidden"); menu.style.display = "grid"; } else { alert("Displayed"); menu.style.display = "none"; }

¡La verificación de meun.display no hizo nada ya que no había nada que verificar!

¡Muchas gracias a Simon K por descubrirlo!

about 4 years ago · Juan Pablo Isaza Report

0

¡Prueba esto en su lugar!

 function toggleMenu() { let menu = document.getElementById("main-nav"); if (window.getComputedStyle(menu).display == "none") { alert("Hidden"); menu.style.display = "grid"; } else if (window.getComputedStyle(menu).display == "grid") { alert("Displayed"); menu.style.display = "none"; } }
 .main-nav { grid-area: N; text-transform: uppercase; } /* Style the nav links */ .main-nav ul { display: grid; grid-template-columns: repeat(4,20vw); } .main-nav li { /* No bullets */ text-align: center; list-style-type: none; min-width: 20vw; } .main-nav a { /* Not italic unlike all other a elements */ text-decoration: none; font-style: normal; }
 <div class="main-nav"> <ul id="main-nav"> <li><a class="hoverlink activemenu" href="index.html">home</a></li> <li><a class="hoverlink" href="shop.html">shop</a></li> <li><a class="hoverlink" href="notes.html">notes</a></li> <li><a class="hoverlink" href="info.html">info</a></li> </ul> <button onClick="toggleMenu()">☰</button> </div>

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!