I'm creating a meal customisation feature on a website where the customer can choose a variety of different ingredients to configure their meal. I have the back end working perfectly, but I'm having a bit of trouble with the front end.
I've used a variety of id's, classes and functions to create a hover overlay and then apply a border around the food images once they are clicked (selected) but it's quite a long method. It works, but as there are a lot more ingredients than this (another 30) I'm a bit worried about the functions getting too long.
HTML
<img id="food" onclick="select()" src="https://website.com/uploads/2020/03/Curried-Chicken-Breast-1-scaled.jpg" style="width:250px;">
<img id="food1" onclick="select1()" src="https://website.com/uploads/2020/03/Curried-Chicken-Breast-1-scaled.jpg" style="width:250px;">
CSS:
#food:hover, #food1:hover, #food2:hover, #food3:hover, #food4:hover, #food5:hover, #food6:hover, #food7:hover{
filter: brightness(75%); !important;
}
.selected {
border: 3px solid #186472 !important;
}
JavaScript
<script>
function select(){
document.getElementById("food").classList.add('selected');
document.getElementById("food1").classList.remove('selected');
document.getElementById("food2").classList.remove('selected');
document.getElementById("food3").classList.remove('selected');
document.getElementById("food4").classList.remove('selected');
document.getElementById("food5").classList.remove('selected');
document.getElementById("food6").classList.remove('selected');
document.getElementById("food7").classList.remove('selected');
}
function select1(){
document.getElementById("food").classList.remove('selected');
document.getElementById("food1").classList.add('selected');
document.getElementById("food2").classList.remove('selected');
document.getElementById("food3").classList.remove('selected');
document.getElementById("food4").classList.remove('selected');
document.getElementById("food5").classList.remove('selected');
document.getElementById("food6").classList.remove('selected');
document.getElementById("food7").classList.remove('selected');
}
function select2(){
document.getElementById("food").classList.remove('selected');
document.getElementById("food1").classList.remove('selected');
document.getElementById("food2").classList.add('selected');
document.getElementById("food3").classList.remove('selected');
document.getElementById("food4").classList.remove('selected');
document.getElementById("food5").classList.remove('selected');
document.getElementById("food6").classList.remove('selected');
document.getElementById("food7").classList.remove('selected');
}
function select3(){
document.getElementById("food").classList.remove('selected');
document.getElementById("food1").classList.remove('selected');
document.getElementById("food2").classList.remove('selected');
document.getElementById("food3").classList.add('selected');
document.getElementById("food4").classList.remove('selected');
document.getElementById("food5").classList.remove('selected');
document.getElementById("food6").classList.remove('selected');
document.getElementById("food7").classList.remove('selected');
}
function select4(){
document.getElementById("food").classList.remove('selected');
document.getElementById("food1").classList.remove('selected');
document.getElementById("food2").classList.remove('selected');
document.getElementById("food3").classList.remove('selected');
document.getElementById("food4").classList.add('selected');
document.getElementById("food5").classList.remove('selected');
document.getElementById("food6").classList.remove('selected');
document.getElementById("food7").classList.remove('selected');
}
function select5(){
document.getElementById("food").classList.remove('selected');
document.getElementById("food1").classList.remove('selected');
document.getElementById("food2").classList.remove('selected');
document.getElementById("food3").classList.remove('selected');
document.getElementById("food4").classList.remove('selected');
document.getElementById("food5").classList.add('selected');
document.getElementById("food6").classList.remove('selected');
document.getElementById("food7").classList.remove('selected');
}
function select6(){
document.getElementById("food").classList.remove('selected');
document.getElementById("food1").classList.remove('selected');
document.getElementById("food2").classList.remove('selected');
document.getElementById("food3").classList.remove('selected');
document.getElementById("food4").classList.remove('selected');
document.getElementById("food5").classList.remove('selected');
document.getElementById("food6").classList.add('selected');
document.getElementById("food7").classList.remove('selected');
}
function select7(){
document.getElementById("food").classList.remove('selected');
document.getElementById("food1").classList.remove('selected');
document.getElementById("food2").classList.remove('selected');
document.getElementById("food3").classList.remove('selected');
document.getElementById("food4").classList.remove('selected');
document.getElementById("food5").classList.remove('selected');
document.getElementById("food6").classList.remove('selected');
document.getElementById("food7").classList.add('selected');
}
</script>
.food) instead of numbered ids, use.addEventListener()and make use ofthisin the event handler, use a loop to remove.selectedconst selectedElements = document.getElementsByClassName("selected");