Я создаю калькулятор чаевых с сеткой кнопок для возможных процентов. Когда выбрана любая кнопка подсказки, я хочу, чтобы шрифт и цвет фона изменились. Вот моя проблема: если у меня выбрана кнопка подсказки, а затем я переключаю фокус на другую кнопку подсказки, текст на ранее сфокусированной кнопке подсказки исчезает? А потом, если навести на него курсор, он снова появится.
У меня есть класс в CSS для цвета шрифта любой невыбранной кнопки. В событии щелчка я попытался перебрать каждую кнопку в сетке и вручную добавить этот шрифт с помощью DOM, но я все еще получаю эту проблему с «исчезающим текстом». Нужно ли мне что-то делать с событием «размытие»? Я застрял! Вот мой код для этой сетки кнопок:
tipTiles.forEach((el) => {
el.addEventListener("click", (e) => {
tipTiles.forEach((tile) => {
if (tile.classList.contains("btn-bg2")) {
tile.classList.remove("btn-bg2");
tile.classList.remove("btn-font2");
tile.classList.add("btn-font1");
}
e.currentTarget.classList.add("btn-bg2");
e.currentTarget.classList.add("btn-font2");
});
});
});
Ссылка на проект ниже:
Я только что попытался воспроизвести ваши проблемы, но, похоже, у меня все работает нормально. У меня меняется цвет текста и фона, когда я нажимаю и навожу курсор на любую другую кнопку. Я использую Сафари 15.3. Какой браузер вы используете? Это в режиме разработки? Это может вызвать проблемы с правильным поведением событий.
Попробуйте это, это должно решить вашу проблему :)
<li class = "tip-tile" tabindex = "0">
.tip-tile:last-child { color: unset; text-align: center; padding: 0.5rem; border-radius: 5px; font-size: 1.2rem; background-color: #f4fafa; -webkit-transition: background-color 0.2s linear; transition: background-color 0.2s linear; }
tipTiles.forEach((el) => { tipTiles.forEach((tile) => { tile.classList.remove("tip-tile"); tile.classList.add('btn-bg1', 'btn-font1', 'tip-tile'); }); el.addEventListener("click", (e) => { tipTiles.forEach((tile) => { if (tile.classList.contains('btn-bg2')) { tile.classList.remove("tip-tile"); tile.classList.replace("btn-bg2", "btn-bg1"); tile.classList.replace("btn-font2", "btn-font1"); tile.classList.add("tip-tile"); } e.currentTarget.classList.replace("btn-bg1", "btn-bg2"); e.currentTarget.classList.replace("btn-font1", "btn-font2"); }); }); });
resetBtn.addEventListener("click", function () { if (totalAmount.textContent !== 0) { totalAmount.textContent = "$0.00"; tipAmount.textContent = "$0.00"; billField.value = 0; peopleField.value = 0; resetBtn.classList.remove("btn-bg2"); tipTiles.forEach((tile) => { if (tile.classList.contains("btn-bg2")) { tile.classList.remove("tip-tile"); tile.classList.replace("btn-bg2", "btn-bg1"); tile.classList.replace("btn-font2", "btn-font1"); tile.classList.add("tip-tile"); } }); } });
Вы заслужили золото! Вы решили мою проблему, спасибо!
Все, что вы здесь делаете, это добавляете и удаляете имена классов; без HTML и, что важно, без CSS мы ничего не можем сделать. Пожалуйста, ознакомьтесь с руководством "минимальный воспроизводимый пример", а также см. "Как спросить"