移动端汉堡菜单JS实现报错:无法读取null的addEventListener属性
移动端响应式汉堡菜单报错修复方案
你遇到的Uncaught TypeError: Cannot read properties of null (reading 'addEventListener')错误,以及菜单点击无响应的问题,主要是三个细节错误导致的,以下是具体修复步骤:
1. 类名拼写不匹配
JavaScript代码中使用了.burger_menu(下划线)作为选择器,但HTML里汉堡按钮的类名是burger-menu(短横线),这会导致document.querySelector找不到元素,返回null,进而触发报错。
2. classList.toggle参数错误
navLinks.classList.toggle(".mobile-menu")里的.mobile-menu多了前缀点,toggle方法只需要传入类名本身,不需要加选择器的点符号。
3. 缺少移动端菜单激活样式
当前CSS中没有定义.mobile-menu类的样式,即使JS逻辑正确,点击汉堡按钮后导航栏也不会有视觉变化。
修正后的JavaScript代码
const burgerMenu = document.querySelector(".burger-menu"); const navLinks = document.querySelector(".nav-links"); burgerMenu.addEventListener("click", () => { navLinks.classList.toggle("mobile-menu"); });
补充后的CSS代码(在移动端媒体查询内添加)
在@media screen and (max-width: 900px)的规则里,添加.mobile-menu的样式:
@media screen and (max-width: 900px) { /* 保留原有其他样式 */ .nav-links.mobile-menu { margin-left: 0; } }
完整的移动端媒体查询CSS(参考)
@media screen and (max-width: 900px) { .navbar { padding: 0; } .navbar .logo { position: absolute; top: 50px; left: 50px; } .nav-links { top: 0; left: 0; position: absolute; background-color: rgba(146, 189, 202, 0.252); backdrop-filter: blur(7px); width: 100%; height: 100vh; display: flex; justify-content: center; align-items: center; margin-left: -100%; transition: all 0.8s ease; } /* 添加这部分激活样式 */ .nav-links.mobile-menu { margin-left: 0; } .nav-links ul { display: flex; flex-direction: column; align-items: center; } .navbar .nav-links ul li { margin: 25px; font-size: 2em; } .navbar .burger-menu { display: block; } }
这样修改后,点击汉堡按钮就能正常触发导航栏的显示/隐藏切换,控制台的报错也会消失。
内容的提问来源于stack exchange,提问作者Amalia S
相关产品推荐
相关产品推荐

