I am trying to make a menu for practice and am having issues with making something simply appear and disappear on click of a class called "option". For some reason, when you click on the image, text, or icon nested inside the option div, I get an error saying that it cannot read properties of undefined. I know it is not undefined, or so I think because I can log the outerHTML of the object I'm clicking, but can't add a class to it. I'm new to web development so any help, even if not the full answer that will lead me in the correct direction is very helpful and appreciated :)
let counter = 0;
const icon = document.querySelector('.dropdown-arrow');
const allIcon = document.querySelectorAll('.dropdown-arrow');
const options = document.querySelectorAll(".option");
const foodItem = document.querySelectorAll('.food-item')
const optionContainer = document.querySelectorAll('.option-container');
options.forEach(function(option) {
option.addEventListener("click", function(event) {
let element = event.target;
let currentArrow = element.getElementsByTagName('ion-icon')[0];
if (counter == 0) {
// ARROW CLASS FUNCTIONALITY ON CLICK
console.log(currentArrow.outerHTML);
currentArrow.classList.add('rotate-on');
currentArrow.classList.remove('rotate-off');
counter++;
//MENU DESC. FUNCTIONALITY
foodItem.forEach(function(food) {
food.classList.remove('hidden');
})
} else {
// ARROW CLASS FUNCTIONALITY ON CLICK
currentArrow.classList.add('rotate-off');
currentArrow.classList.remove('rotate-on');
counter--;
//MENU DESC. FUNCTIONALITY
foodItem.forEach(function(food) {
food.classList.add('hidden');
})
}
});
});
.rotate-on {
transform: rotate(-180deg);
transition: all .3s;
}
.rotate-off {
transform: rotate(0deg);
transition: all .3s;
}
.hidden {
display: none;
}
<section class = "section section-menu">
<div class = "option">
<div class = "option-container">
<img src = "img/Breakfast-Figma.png" alt="Breakfeast img">
<h3 class = "option-text"> Breakfeast</h3>
</div>
<ion-icon name="chevron-up-circle-outline" class = "dropdown-arrow"></ion-icon>
</div>
<div class="food-item hidden">
<div class = "food-img-container">
<img src = "img/_0000s_0000_Stack620_0000_CFA_1605_60_Biscuit_Chicken_PROD_2155_1240px.png">
</div>
<div class="h1-container">
<h1 class = "item-name">Chick-fil-A<sup style = "font-size: 60%;">®</sup> Chicken Biscuit</h1>
</div>
<div class = "item-info">
<div class = "cal-container">
<span class = "food-price">Sandwhich Only: $2.45 <em>or</em> Meal: $4.89<span style = "color:inherit;"></span></span>
</div>
<div class = "cal-container">
<span class = "food-cal">460 Cal per biscuit</span>
</div>
<div class="food-desc">
<span class = "desc-option"></span>
</div>
</div>
</div>
<div class="food-item hidden">
<div class = "food-img-container">
<img src = "img/_0000s_0014_[Feed]_0000s_0024_Breakfast_Chicken-Mini-4ct.png">
</div>
<div class="h1-container">
<h1 class = "item-name">Chick-fil-A Chick-n-Minis<sup style = "font-size: 70%;">™</sup></h1>
</div>
<div class = "item-info">
<div class = "cal-container">
<span class = "food-price">Sandwhich Only: $3.29 <em>or</em> Meal: $5.75<span style = "color:inherit;"></span></span>
</div>
<div class = "cal-container">
<span class = "food-cal">360 Cal per 4 Chick-n-Minis
</span>
</div>
<div class="food-desc">
<span class = "desc-option"></span>
</div>
</div>
</div>
<div class = "option">
<div class = "option-container">
<img src = "img/CFA-Spicy-Chicken-Entree-Figma.png" alt="Spicy Chicken img">
<h3 class = "option-text"> Entreés</h3>
</div>
<ion-icon name="chevron-up-circle-outline" class = "dropdown-arrow"></ion-icon>
</div>
<div class = "option">
<div class = "option-container">
<img src = "img/Salad-Figma.png" alt="Salad img">
<h3 class = "option-text"> Salads</h3>
</div>
<ion-icon name="chevron-up-circle-outline" class = "dropdown-arrow"></ion-icon>
</div>
<div class = "option">
<div class = "option-container">
<img src = "img/Large-Fries-Sides-Figma.png" alt="Fries img">
<h3 class = "option-text"> Sides</h3>
</div>
<ion-icon name="chevron-up-circle-outline" class = "dropdown-arrow"></ion-icon>
</div>
<div class = "option">
<div class = "option-container">
<img src = "img/Kids-Meal-Figma.png" alt="Kids Meal img">
<h3 class = "option-text"> Kid's Meals</h3>
</div>
<ion-icon name="chevron-up-circle-outline" class = "dropdown-arrow"></ion-icon>
</div>
<div class = "option">
<div class = "option-container">
<img src = "img/Milkshake-Treat-Figma.png" alt="Milkshake img">
<h3 class = "option-text"> Treats</h3>
</div>
<ion-icon name="chevron-up-circle-outline" class = "dropdown-arrow"></ion-icon>
</div>
<div class = "option">
<div class = "option-container">
<img src = "img/Beverage-Figma.png" alt="Beverage img">
<h3 class = "option-text"> Drinks</h3>
</div>
<ion-icon name="chevron-up-circle-outline" class = "dropdown-arrow"></ion-icon>
</div>
<div class = "option">
<div class = "option-container">
<img src = "img/CFA-Dipping-Sauce-Figma.png" alt="Dipping Sauce img">
<h3 class = "option-text"> Dipping Sauces & Dressings</h3>
</div>
<ion-icon name="chevron-up-circle-outline" class = "dropdown-arrow"></ion-icon>
</div>
</section>