Reputation: 150
I am trying to make a facebook clone and 'm facing a problem in see more button it shows the hidden items on first click but does not hide them on another click also on each click it gives the error "Uncaught TypeError: Cannot read property 'classList' of undefined"
My javascript code
function showHidden() {
// i = 0;
let items = document.getElementsByClassName("hidden");
if (items[0].classList.contains("hidden")) {
for (i = 0; items.length > 0; i++) {
items[i].classList.add("unhidden");
}
} else if (items[0].classList.contains("unhidden") && items[0].classList.contains("hidden")) {
for (i = 0; items.length > 0; i++) {
items[i].classList.remove("unhidden");
}
}
}
My HTML Code
<li class="unhidden"><img
src="https://i.pinimg.com/originals/71/fc/47/71fc472790aa43f44555d08f4d4904c2.jpg"><a
href="#"><b>MR. X</b></a></li>
<li class="unhidden"><img src="https://www.facebook.com/rsrc.php/v3/yx/r/5rR6LRpNc5u.png"><a
href="#"><b>Covid 19 Information
Center</b></a></li>
<li class="unhidden"><img src="https://www.facebook.com/rsrc.php/v3/y8/r/S0U5ECzYUSu.png"><a
href="#"><b>Friends</b></a></li>
<li class="unhidden"><img src="https://www.facebook.com/rsrc.php/v3/yU/r/D2y-jJ2C_hO.png"><a
href="#"><b>Market Place</b></a>
</li>
<li class="unhidden"><img src="https://www.facebook.com/rsrc.php/v3/y9/r/DHBHg9MEeSC.png"><a
href="#"><b>Ads</b></a></li>
<li class="unhidden"><img src="https://www.facebook.com/rsrc.php/v3/y5/r/duk32h44Y31.png"><a
href="#"><b>Watch</b></a></li>
<li class="unhidden"><img src="https://www.facebook.com/rsrc.php/v3/y8/r/he-BkogidIc.png"><a
href="#"><b>Memories</b></a>
</li>
<li class="unhidden"><img src="https://www.facebook.com/rsrc.php/v3/y5/r/PrjLkDYpYbH.png"><a
href="#"><b>Groups</b></a></li>
<li class="unhidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png"><a
href="#"><b>Events</b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png" class="hidden"><a
href="#"><b></b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png" class="hidden"><a
href="#"><b></b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png" class="hidden"><a
href="#"><b></b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png" class="hidden"><a
href="#"><b></b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png" class="hidden"><a
href="#"><b></b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png" class="hidden"><a
href="#"><b></b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png" class="hidden"><a
href="#"><b></b></a></li>
<li class="unhidden" onclick="showHidden();"><i class="fa fa-chevron-down"></i><a href="#"
style="padding-left: 21px;"><b>See More</b></a></li>
CSS :
#navbarHz {
/* position: fixed; */
top: 3rem;
/* top: 0; */
bottom:0;
position:fixed;
overflow-y:auto;
overflow-x:hidden;
}
#navbarHz>ul {
display: flex;
width: 22vw;
flex-direction: column;
list-style: none;
/* height: auto; */
/* overflow-y: auto; */
}
#navbarHz>ul>li {
padding: 10px;
display: none;
align-items: center;
font-size: 18px;
}
#navbarHz>ul>li>i{
/* width: 40px; */
/* margin-left: 12px; */
padding: 8px;
border-radius: 30px;
background-color: rgba(0, 0, 0, 0.1);
display: block;
/* margin-left: 12px; */
}
#navbarHz>ul>li>a {
text-decoration: none;
color: black;
}
#navbarHz>ul>li>img {
width: 40px;
height: 40px;
border-radius: 50%;
margin-right: 12px;
}
Upvotes: 1
Views: 3352
Reputation: 25408
Error is because of wrong logic in the for
statement.
You have used
for (i = 0; items.length > 0; i++) {
This will result in an infinte loop
which will always true if items.length
is not equal to 0
. So when i > items.length
then it will be undefined and getting classList
on undefined
will produce error.
for ( i = 0; i < items.length; i++ ) {
function showHidden() {
// i = 0;
let items = document.getElementsByClassName("hidden");
if (items[0].classList.contains("hidden")) {
for (i = 0; i < items.length; i++) {
items[i].classList.add("unhidden");
}
} else if (items[0].classList.contains("unhidden") && items[0].classList.contains("hidden")) {
for (i = 0; i < items.length; i++) {
items[i].classList.remove("unhidden");
}
}
}
#navbarHz {
/* position: fixed; */
top: 3rem;
/* top: 0; */
bottom: 0;
position: fixed;
overflow-y: auto;
overflow-x: hidden;
}
#navbarHz>ul {
display: flex;
width: 22vw;
flex-direction: column;
list-style: none;
/* height: auto; */
/* overflow-y: auto; */
}
#navbarHz>ul>li {
padding: 10px;
display: none;
align-items: center;
font-size: 18px;
}
#navbarHz>ul>li>i {
/* width: 40px; */
/* margin-left: 12px; */
padding: 8px;
border-radius: 30px;
background-color: rgba(0, 0, 0, 0.1);
display: block;
/* margin-left: 12px; */
}
#navbarHz>ul>li>a {
text-decoration: none;
color: black;
}
#navbarHz>ul>li>img {
width: 40px;
height: 40px;
border-radius: 50%;
margin-right: 12px;
}
<li class="unhidden"><img src="https://i.pinimg.com/originals/71/fc/47/71fc472790aa43f44555d08f4d4904c2.jpg"><a href="#"><b>MR. X</b></a></li>
<li class="unhidden"><img src="https://www.facebook.com/rsrc.php/v3/yx/r/5rR6LRpNc5u.png"><a href="#"><b>Covid 19 Information Center</b></a></li>
<li class="unhidden"><img src="https://www.facebook.com/rsrc.php/v3/y8/r/S0U5ECzYUSu.png"><a href="#"><b>Friends</b></a></li>
<li class="unhidden"><img src="https://www.facebook.com/rsrc.php/v3/yU/r/D2y-jJ2C_hO.png"><a href="#"><b>Market Place</b></a></li>
<li class="unhidden"><img src="https://www.facebook.com/rsrc.php/v3/y9/r/DHBHg9MEeSC.png"><a href="#"><b>Ads</b></a></li>
<li class="unhidden"><img src="https://www.facebook.com/rsrc.php/v3/y5/r/duk32h44Y31.png"><a href="#"><b>Watch</b></a></li>
<li class="unhidden"><img src="https://www.facebook.com/rsrc.php/v3/y8/r/he-BkogidIc.png"><a href="#"><b>Memories</b></a></li>
<li class="unhidden"><img src="https://www.facebook.com/rsrc.php/v3/y5/r/PrjLkDYpYbH.png"><a href="#"><b>Groups</b></a></li>
<li class="unhidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png"><a href="#"><b>Events</b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png" class="hidden"><a href="#"><b></b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png" class="hidden"><a href="#"><b></b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png" class="hidden"><a href="#"><b></b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png" class="hidden"><a href="#"><b></b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png" class="hidden"><a href="#"><b></b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png" class="hidden"><a href="#"><b></b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png" class="hidden"><a href="#"><b></b></a></li>
<li class="unhidden" onclick="showHidden();"><i class="fa fa-chevron-down"></i><a href="#" style="padding-left: 21px;"><b>See More</b></a></li>
------------EDITED-------------
function showHidden() {
let items = document.querySelectorAll(".hidden");
for (let i = 0; i < items.length; i++) {
items[i].classList.remove("hidden");
}
}
#navbarHz {
/* position: fixed; */
top: 3rem;
/* top: 0; */
bottom: 0;
position: fixed;
overflow-y: auto;
overflow-x: hidden;
}
#navbarHz>ul {
display: flex;
width: 22vw;
flex-direction: column;
list-style: none;
/* height: auto; */
/* overflow-y: auto; */
}
#navbarHz>ul>li {
padding: 10px;
display: none;
align-items: center;
font-size: 18px;
}
#navbarHz>ul>li>i {
/* width: 40px; */
/* margin-left: 12px; */
padding: 8px;
border-radius: 30px;
background-color: rgba(0, 0, 0, 0.1);
display: block;
/* margin-left: 12px; */
}
#navbarHz>ul>li>a {
text-decoration: none;
color: black;
}
#navbarHz>ul>li>img {
width: 40px;
height: 40px;
border-radius: 50%;
margin-right: 12px;
}
.hidden {
display: none;
}
.unhidden {
display: block;
}
<div id="navbarHz">
<li class="unhidden"><img src="https://i.pinimg.com/originals/71/fc/47/71fc472790aa43f44555d08f4d4904c2.jpg"><a href="#"><b>MR. X</b></a></li>
<li class="unhidden"><img src="https://www.facebook.com/rsrc.php/v3/yx/r/5rR6LRpNc5u.png"><a href="#"><b>Covid 19 Information Center</b></a></li>
<li class="unhidden"><img src="https://www.facebook.com/rsrc.php/v3/y8/r/S0U5ECzYUSu.png"><a href="#"><b>Friends</b></a></li>
<li class="unhidden"><img src="https://www.facebook.com/rsrc.php/v3/yU/r/D2y-jJ2C_hO.png"><a href="#"><b>Market Place</b></a></li>
<li class="unhidden"><img src="https://www.facebook.com/rsrc.php/v3/y9/r/DHBHg9MEeSC.png"><a href="#"><b>Ads</b></a></li>
<li class="unhidden"><img src="https://www.facebook.com/rsrc.php/v3/y5/r/duk32h44Y31.png"><a href="#"><b>Watch</b></a></li>
<li class="unhidden"><img src="https://www.facebook.com/rsrc.php/v3/y8/r/he-BkogidIc.png"><a href="#"><b>Memories</b></a></li>
<li class="unhidden"><img src="https://www.facebook.com/rsrc.php/v3/y5/r/PrjLkDYpYbH.png"><a href="#"><b>Groups</b></a></li>
<li class="unhidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png"><a href="#"><b>Events</b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png"><a href="#"><b></b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png"><a href="#"><b></b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png"><a href="#"><b></b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png"><a href="#"><b></b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png"><a href="#"><b></b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png"><a href="#"><b></b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png"><a href="#"><b></b></a></li>
<li class="unhidden" onclick="showHidden();"><i class="fa fa-chevron-down"></i><a href="#" style="padding-left: 21px;"><b>See More</b></a></li>
</div>
Edited to toggle see more
and hide
function showHidden() {
let hidden = document.querySelectorAll(".hidden");
let unHidden = document.querySelectorAll(".unhidden");
let btn = document.querySelector(".see-more-btn").querySelector("a").firstElementChild;
if (hidden.length > 0) {
for (let i = 0; i < hidden.length; i++) {
hidden[i].classList.remove("hidden");
hidden[i].classList.add("unhidden");
btn.textContent = "Hide"
}
} else if (unHidden.length > 0) {
for (let i = 0; i < unHidden.length; i++) {
unHidden[i].classList.remove("unhidden");
unHidden[i].classList.add("hidden");
btn.textContent = "See More"
}
}
}
#navbarHz {
/* position: fixed; */
top: 3rem;
/* top: 0; */
bottom: 0;
position: fixed;
overflow-y: auto;
overflow-x: hidden;
}
#navbarHz>ul {
display: flex;
width: 22vw;
flex-direction: column;
list-style: none;
/* height: auto; */
/* overflow-y: auto; */
}
#navbarHz>li {
padding: 10px;
align-items: center;
list-style-type: none;
font-size: 18px;
}
#navbarHz>ul>li>i {
/* width: 40px; */
/* margin-left: 12px; */
padding: 8px;
border-radius: 30px;
background-color: rgba(0, 0, 0, 0.1);
display: block;
/* margin-left: 12px; */
}
#navbarHz>ul>li>a {
text-decoration: none;
color: black;
}
#navbarHz>ul>li>img {
width: 40px;
height: 40px;
border-radius: 50%;
margin-right: 12px;
}
.hidden {
display: none;
}
<div id="navbarHz">
<li><img src="https://i.pinimg.com/originals/71/fc/47/71fc472790aa43f44555d08f4d4904c2.jpg"><a href="#"><b>MR. X</b></a></li>
<li><img src="https://www.facebook.com/rsrc.php/v3/yx/r/5rR6LRpNc5u.png"><a href="#"><b>Covid 19 Information Center</b></a></li>
<li><img src="https://www.facebook.com/rsrc.php/v3/y8/r/S0U5ECzYUSu.png"><a href="#"><b>Friends</b></a></li>
<li><img src="https://www.facebook.com/rsrc.php/v3/yU/r/D2y-jJ2C_hO.png"><a href="#"><b>Market Place</b></a></li>
<li><img src="https://www.facebook.com/rsrc.php/v3/y9/r/DHBHg9MEeSC.png"><a href="#"><b>Ads</b></a></li>
<li><img src="https://www.facebook.com/rsrc.php/v3/y5/r/duk32h44Y31.png"><a href="#"><b>Watch</b></a></li>
<li><img src="https://www.facebook.com/rsrc.php/v3/y8/r/he-BkogidIc.png"><a href="#"><b>Memories</b></a></li>
<li><img src="https://www.facebook.com/rsrc.php/v3/y5/r/PrjLkDYpYbH.png"><a href="#"><b>Groups</b></a></li>
<li><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png"><a href="#"><b>Events</b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png"><a href="#"><b></b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png"><a href="#"><b></b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png"><a href="#"><b></b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png"><a href="#"><b></b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png"><a href="#"><b></b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png"><a href="#"><b></b></a></li>
<li class="hidden"><img src="https://www.facebook.com/rsrc.php/v3/ys/r/8wTx0Eu2vRq.png"><a href="#"><b></b></a></li>
<li onclick="showHidden();" class="see-more-btn">
<i class="fa fa-chevron-down"></i>
<a href="#" style="padding-left: 21px;">
<b>See More</b>
</a>
</li>
</div>
Upvotes: 2