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

如何用jQuery实现多页复用响应式导航栏并修复toggleButton为空报错

问题修复方案

错误根因

代码执行顺序不符合预期:script.js加载后会优先执行获取toggleButton、nav-list元素并绑定点击事件的逻辑,但此时jQuery的load方法还未完成外部nav.html文件的加载,对应DOM节点还没有插入到当前页面中,因此获取到的toggleButton为null,绑定事件时就会抛出报错。你直接把nav.html的代码写在index.html中时,元素在页面初始化时就已存在,所以功能可以正常运行。

修复方法

修改script.js的代码逻辑,将元素获取和事件绑定的操作放到load方法的回调函数中,确保只有nav.html加载完成、DOM节点插入页面后,再执行相关操作,修改后代码如下:

$(function(){                                                         
  // 导航加载完成后再执行元素获取和事件绑定
  $("#nav-placeholder").load("nav.html", function() {
    const toggleButton = document.getElementById('toggleButton');
    const navList = document.getElementById('nav-list');
    toggleButton.addEventListener('click', () => {
        navList.classList.toggle('active');
    });
  });
  $("#footer-placeholder").load("footer.html");
});

可选优化方案

如果需要更通用的动态元素事件绑定逻辑,也可以使用事件委托的方式,将点击事件绑定到页面初始化时就存在的父级元素上,无需依赖load回调:

$(function(){                                                         
  $("#nav-placeholder").load("nav.html");
  $("#footer-placeholder").load("footer.html");
  // 事件委托绑定点击事件
  $(document).on('click', '#toggleButton', function() {
    $('#nav-list').toggleClass('active');
  });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:06:03