Tabs标签页切换时内容不更新怎么办?
我用原生JS写了个Tabs组件,点击标签能高亮,但对应的内容区域没变化。试过给每个面板加display: none/block切换,可还是不行。
控制台也没报错,就是点哪个标签都只显示第一个内容。是不是事件绑定哪里出问题了?
const tabs = document.querySelectorAll('.tab');
const panels = document.querySelectorAll('.panel');
tabs.forEach(tab => {
tab.addEventListener('click', () => {
// 移除所有激活状态
tabs.forEach(t => t.classList.remove('active'));
panels.forEach(p => p.style.display = 'none');
// 激活当前tab和对应panel
tab.classList.add('active');
const target = tab.dataset.target;
document.getElementById(target).style.display = 'block';
});
});
.tab元素有没有写对data-target属性,而且对应的#id的.panel要存在。比如你 HTML 应该长这样:
注意几个坑:
-
data-target的值必须和id完全一致,连大小写都不能错-
panel元素初始状态要加style="display:none",不然第一个点完可能没问题,后面点别的就乱套- 确保你 JS 代码是在 DOM 加载完之后执行的,比如放在
<body>底部,或者用DOMContentLoaded包一层如果上面都对了还是不行,直接在点击里加个
console.log(target)看看打印的是不是你想要的 ID,基本 90% 就是这俩问题:ID 不匹配或者初始状态没隐藏。要是还不行,把你的 HTML 贴出来,我帮你看看是不是结构写歪了。