所以我有点困惑为什么我正在处理的代码没有按预期工作,所以任何帮助都会很好。
所以让我解释一下我正在处理一个展开/折叠菜单,当点击 a 标签时,会添加一个类并添加 css 来实现这一点,并且该类也会从其他链接中删除。
CSS代码:
a {
max-height: 0;
overflow: hidden;
transition: 0.5s ease-in-out
}
a.clicked {
max-height: 600px;
}
html代码:
<ul>
<li><a onclick='mobileMenu(event)'>link 1</a><li>
<li><a onclick='mobileMenu(event)'>link 2</a><li>
<li><a onclick='mobileMenu(event)'>link 3</a><li>
<li><a onclick='mobileMenu(event)'>link 4</a><li>
</ul>
对于这篇文章,我保持 html 非常简单,但如果需要更详细,请告诉我。
每个链接都有一个 onclick 附加。
Javascript代码:
function mobileMenu(event) {
event.currentTarget.classList.toggle("clicked");
[].forEach.call(document.querySelectorAll('ul li a'), function(a){
a.classList.remove('clicked');
});
}
所以这段代码主要适用于你点击一个链接的地方,添加“点击”类,并从除当前链接之外的任何其他链接中删除“点击”类,这很好,因为我使用它作为一个可折叠的菜单,所以你点击另一个链接它打开它,同时关闭当前打开的任何其他链接。
我的问题是上面的 js 代码添加了我使用的是“.toggle”的点击类,但这只会添加“点击”类,但不会切换它。我希望能够切换“点击”类并将其从其他链接中删除。所以我不确定这是否是我的一个简单疏忽,但我不确定我哪里出错了以及为什么“.toggle”实际上并没有切换类。
谢谢。
您可以尝试使用 if 语句。它将始终从所有链接中删除选中的,如果没有选中 event.target,它将添加选中的类。
function mobileMenu(event) {
const checked = event.currentTarget.classList.contains('clicked')
[].forEach.call(document.querySelectorAll('ul li a'), function(a){
a.classList.remove('clicked');
});
if (checked) return;
event.currentTarget.classList.toggle("clicked");
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句