I am trying to change the background property of each day on a calendar, when clicked, between blue and green using javascript and CSS. like a toggle function. The default color is blue, and I’ve managed to get each day to turn green when clicked but I can’t figure out how to change them back to blue.
Here’s what I’ve tried.
JavaScript
x
11
11
1
const days = document.getElementsByClassName('day')
2
3
for (let i = 0; i < days.length; i++) {
4
days[i].addEventListener('click', function(e) {
5
if (e.target.style.background != 'linear-gradient(#7ce8b6, #00ff2a)') {
6
e.target.style.background = 'linear-gradient(#7ce8b6, #00ff2a)'
7
} else if (e.target.background != 'linear-gradient(#7CB9E8, #00FFFF)') {
8
e.target.background = 'linear-gradient(#7CB9E8, #00FFFF)'
9
}
10
});
11
}
JavaScript
1
8
1
.day {
2
height: 10em;
3
width: 100px;
4
padding: 1em;
5
border: 5px solid rgb(29, 29, 116);
6
border-radius: 1em;
7
background: linear-gradient(#7CB9E8, #00FFFF);
8
}
JavaScript
1
10
10
1
<div class="day">1</div>
2
<div class="day">2</div>
3
<div class="day">3</div>
4
<div class="day">4</div>
5
<div class="day">5</div>
6
<div class="day">6</div>
7
<div class="day">7</div>
8
<div class="day">8</div>
9
<div class="day">9</div>
10
<div class="day">10</div>
Advertisement
Answer
Define a CSS class that has the style for green background color and using javascript, just toggle that class on each div
element.
JavaScript
1
7
1
const days = document.getElementsByClassName('day');
2
3
for (let i = 0; i < days.length; i++) {
4
days[i].addEventListener('click', function(e) {
5
days[i].classList.toggle("green");
6
});
7
}
JavaScript
1
12
12
1
.day {
2
height: 30px;
3
width: 30px;
4
padding: 1em;
5
border: 5px solid rgb(29, 29, 116);
6
border-radius: 1em;
7
background: linear-gradient(#7CB9E8, #00FFFF);
8
}
9
10
.green {
11
background: linear-gradient(#7ce8b6, #00ff2a);
12
}
JavaScript
1
2
1
<div class="day">1</div>
2
<div class="day">2</div>