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

移动端汉堡导航菜单点击后不显示问题求助

解决移动端汉堡菜单点击无响应问题

核心问题

你的JS脚本在DOM元素加载完成前就执行了,导致无法找到.hamburger和.nav-menu元素,点击事件根本没绑定成功。因为你把<script src="js/script.js"></script>放在了<head>标签里,这时候浏览器还没解析到<body>里的导航元素,document.querySelector返回的是null,自然无法触发点击逻辑。

修复方案

方案1:移动脚本位置到body末尾

把JS脚本标签移到<body>的最后,确保DOM元素全部加载完成后再执行脚本:

<body>
    <header>
      <nav class="navbar">
        <a href="#" class="nav-branding">MYBRAND</a>
        <ul class="nav-menu">
          <li class="nav-item">
            <a href="#" class="nav-link">Home</a>
          </li>
          <li class="nav-item">
            <a href="#" class="nav-link">About</a>
          </li>
          <li class="nav-item">
            <a href="#" class="nav-link">Contact</a>
          </li>
        </ul>
        <div class="hamburger">
          <i class="fa-solid fa-bars"></i>
        </div>
      </nav>
    </header>
    <!-- 把脚本放在body末尾 -->
    <script src="js/script.js"></script>
</body>

方案2:用DOMContentLoaded包裹JS代码

如果不想移动脚本位置,就在JS代码外层添加DOMContentLoaded事件监听,确保DOM加载完成后再执行逻辑:

document.addEventListener('DOMContentLoaded', () => {
  const hamburger = document.querySelector(".hamburger");
  const navMenu = document.querySelector(".nav-menu");

  hamburger.addEventListener("click", () => {
    hamburger.classList.toggle("active");
    navMenu.classList.toggle("active");
  })

  document.querySelectorAll(".nav-link").forEach(n => n.addEventListener("click", () => {
    hamburger.classList.remove("active");
    navMenu.classList.remove("active");
  }))
})

额外检查点

  • 打开浏览器控制台(按F12)查看是否有报错,比如Cannot read properties of null,这就确认是元素找不到的问题。
  • 检查JS文件路径是否正确:如果你的HTML文件在子文件夹中,路径可能需要调整为../js/script.js(根据实际项目结构修改)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:37:24