I am having trouble correctly toggling classes in my tab list using javascript.
At first click the menu is open and on second click on the same will close, but after close will not open again if I click on the same menu.
Check my example to see exactly what I mean:
var prev = '';
var tabsList = document.querySelectorAll('.main-col');
for (i = 0; i < tabsList.length; ++i) {
tabsList[i].addEventListener("click", function(){
var elements = document.getElementsByClassName('main-col');
for (j = 0; j < elements.length; ++j) {
elements[j].classList.remove("open");
}
var index = this.dataset.foo;
document.querySelectorAll('[data-foo="' + index + '"]')[0].classList.toggle("open");
if ( prev == this) {
this.classList.remove("open");
}
prev = this;
});
}
h3 {
cursor: pointer;
}
.main-col .menu {
max-height: 0;
overflow: hidden;
transition: max-height .5s cubic-bezier(0, 1, 0, 1);
}
.main-col.open .menu {
background: #333;
max-height: 500px;
transition: max-height .5s ease-in-out;
}
<div id="f-col1" class="main-col" data-foo="1">
<h3 class="title-col1">Column 1 with sub-menu (1st click open, 2nd close and from now on will not open)</h3>
<div class="column-1">
<ul id="column-1-container" class="menu">
<li id="menu-item-1" class="menu-item"><a href="#">LINK 1</a></li>
<li id="menu-item-1" class="menu-item"><a href="#">LINK 1</a></li>
<li id="menu-item-1" class="menu-item"><a href="#">LINK 1</a></li>
</ul>
</div>
</div>
<div id="f-col2" class="main-col" data-foo="2">
<h3 class="title-col2">Column 2 with sub-menu (1st click open, 2nd close and from now on will not open)</h3>
<div class="column-2">
<ul id="column-2-container" class="menu">
<li id="menu-item-2" class="menu-item"><a href="#">LINK 2</a></li>
<li id="menu-item-2" class="menu-item"><a href="#">LINK 2</a></li>
<li id="menu-item-2" class="menu-item"><a href="#">LINK 2</a></li>
</ul>
</div>
</div>
<div id="f-col3" class="main-col" data-foo="3">
<h3 class="title-col3">Column 3 with sub-menu (1st click open, 2nd close and from now on will not open)</h3>
<div class="column-3">
<ul id="column-3-container" class="menu">
<li id="menu-item-3" class="menu-item"><a href="#">LINK 3</a></li>
<li id="menu-item-3" class="menu-item"><a href="#">LINK 3</a></li>
<li id="menu-item-3" class="menu-item"><a href="#">LINK 3</a></li>
</ul>
</div>
</div>
PS: Please don't give me alternatives with jQuery to this little problem. :)