You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript实现导航栏菜单按钮点击功能失败求助

问题描述

我正在学习JavaScript,尝试创建点击后可打开菜单的导航栏按钮,但经过多次尝试和代码修改,问题仍未解决。我的目标是点击右上角按钮时打开<ul>元素。

原始代码如下:

JavaScript

document.getElementById("navBtn").onclick = function() {abrirNav()};

function abrirNav() {
    document.getElementByID("abrirMenu").classList.toggle("navAberta");
}

CSS

.nav .nav-links{
    display: none;
    position: fixed;
    top: 0;
    left: 0;
    background-color: #ffcc05;
    flex-direction: column;
    height: 100%;
    max-width: 280px;
    width: 100%;
    padding-top: 100px;
    row-gap: 25px;
    transition: all 0.4s linear;
}
/* Mostra o menu ao clicar no botão */
.navAberta{
    display: inherit;
}

HTML

<nav class="nav">
    <div class="logo">AdoptaPet</div>
    <button id="navBtn"><i class="bi bi-list abrirNav"></i></button>
    <ul id="abrirMenu" class="nav-links">
        <i class="bi bi-x fecharNav"></i>
        <li><a href="">Home</a></li>
        <li><a href="">Sobre Nós</a></li>
        <li><a href="">Loja</a></li>
        <li><a href="">Cães para Adoção</a></li>
        <li><a href="">Detalhes do Cão</a></li>
        <li><a href="">Adotar</a></li>
        <li><a href="">Favoritos</a></li>
        <li><a href="">Contactos</a></li>
    </ul>
</nav>

导航栏效果参考:
Navbar


解决方案

1. 修复JavaScript拼写错误

getElementByID是拼写错误,正确方法名为getElementById(最后一个字母为小写d),这是导致无法获取菜单元素、无法切换类名的核心问题。

2. 提升CSS选择器优先级

.navAberta的选择器权重低于.nav .nav-links,即使添加类名,菜单也不会显示。需要修改CSS选择器提高权重:

.nav .nav-links.navAberta{
    display: flex;
}

用flex替代inherit更贴合你设置的flex-direction: column,确保布局逻辑一致。

3. 可选:添加关闭按钮功能

如果需要点击叉号关闭菜单,可在JavaScript中补充事件绑定:

document.getElementById("navBtn").onclick = toggleNav;
document.querySelector(".fecharNav").onclick = toggleNav;

function toggleNav() {
    document.getElementById("abrirMenu").classList.toggle("navAberta");
}

修正后的完整代码

JavaScript

document.getElementById("navBtn").onclick = toggleNav;
document.querySelector(".fecharNav").onclick = toggleNav;

function toggleNav() {
    document.getElementById("abrirMenu").classList.toggle("navAberta");
}

CSS

.nav .nav-links{
    display: none;
    position: fixed;
    top: 0;
    left: 0;
    background-color: #ffcc05;
    flex-direction: column;
    height: 100%;
    max-width: 280px;
    width: 100%;
    padding-top: 100px;
    row-gap: 25px;
    transition: all 0.4s linear;
}
/* 提高选择器权重,确保样式生效 */
.nav .nav-links.navAberta{
    display: flex;
}
/* 可选:给关闭按钮添加样式,提升交互性 */
.fecharNav {
    position: absolute;
    top: 20px;
    right: 20px;
    font-size: 24px;
    cursor: pointer;
}

HTML

<nav class="nav">
    <div class="logo">AdoptaPet</div>
    <button id="navBtn"><i class="bi bi-list abrirNav"></i></button>
    <ul id="abrirMenu" class="nav-links">
        <i class="bi bi-x fecharNav"></i>
        <li><a href="">Home</a></li>
        <li><a href="">Sobre Nós</a></li>
        <li><a href="">Loja</a></li>
        <li><a href="">Cães para Adoção</a></li>
        <li><a href="">Detalhes do Cão</a></li>
        <li><a href="">Adotar</a></li>
        <li><a href="">Favoritos</a></li>
        <li><a href="">Contactos</a></li>
    </ul>
</nav>

内容的提问来源于stack exchange,提问作者Lohr027

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 11:52:47