Мой код должен переключать цвет на красный и обратно после щелчка, но он работает только один раз!
<div class = "time-block">00:00 - 00:59</div>
Класс "red-my-day" для переключения цвета, добавляя или удаляя его.
function addTimeBlocksHandler() {
let arrTimeBlocks = document.getElementsByClassName("time-block");
for (let i = 0; i < arrTimeBlocks.length; i++) {
if (document.getElementsByClassName("time-block")[i].classList.contains("red-my-day")) {
arrTimeBlocks[i].addEventListener("click", () => {
document.getElementsByClassName("time-block")[i].classList.remove("red-my-day");
});
} else if (!document.getElementsByClassName("time-block")[i].classList.contains("red-my-day")) {
arrTimeBlocks[i].addEventListener("click", () => {
document.getElementsByClassName("time-block")[i].classList.add("red-my-day");
});
}
}
}
addTimeBlocksHandler();
Почему это работает один раз, переключитесь на красный цвет и все?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Причина, по которой ваш код не работает, заключается в том, что при выполнении javascript он получает класс class = "time-block" для элемента div. Поскольку у этого элемента нет класса red-my-day, он пропустит добавление прослушивателя событий click внутри первого блока if, перейдет к блоку else и назначит прослушиватель для этого события. Поэтому для красного цвета он сработал только один раз.
Чтобы упростить свой код, вы можете просто использовать toggle(), чтобы он переключал класс при каждом щелчке по элементу.
function addTimeBlocksHandler() {
let arrTimeBlocks = document.getElementsByClassName("time-block");
for (let i = 0; i < arrTimeBlocks.length; i++) {
arrTimeBlocks[i].addEventListener("click", (elem) => {
elem.target.classList.toggle('red-my-day');
});
}
}
addTimeBlocksHandler();.red-my-day{
color: red;
}<div class = "time-block">00:00 - 00:59</div>
<div class = "time-block">00:10 - 01:59</div>
<div class = "time-block">00:20 - 02:59</div>