При нажатии на текст цвет не меняется. То есть дело в том, что я нажимаю на span, вложенный в li. При нажатии на весь элемент, который подсвечивается при наведении, всё отрабатывает, как ожидается.
Можно ли обойти эту проблему, не меняя разметку?
Дело в том что в evt.target хранятся разные значения в зависимости от клика по span или по li. Соответственно нужно моделировать решение учитывая этот нюанс.
evt.target.firstChild - моделировать приложение используя последовательность элементов - хрупкое занятие. Лучше привязываться к названиям классов. А еще лучше отдельно хранить данные и отдельно рендерить их представление (но это требует большей подготовки).
Обработчик клика по .color-panel__bg--custom элементу вызывается дважды (раз когда кликаешь по li элементу, второй раз когда срабатывает механика аттрибута for="custom-color". Второй раз происходит “клик” по элементу с айдишником “custom-color” и вся логика обработчика выполняется заново.
В самом подходе могли закраться проблемы. Возможно понадобится пересматривать подход, а не просто пытаться заставить работать то что есть. Не бойся изменить подход после того как узнала достаточно про задачу, возможности/ограничения браузера.
И если хочешь улучшить код, то вынеси навешивание обработчиков из вызова обработчиков. Это ненадежное решение с проблемами производительности и понимания.
Я б порадив рознести загальну логіку на окремі функції, наприклад setCurrentColor(color) , setPrevColor() , getNewColor(element)
Таким чином краще дебажити функціонал та розуміти в якому місці помилка.
Тут ще проблема є що на кожен клік додається лістенер на customColorInput , та кількість лістенерів постійно збільшується.
в мене взагалі change на input type=color не відпрацьовують :)
Работает, но не совсем верно…)
Наверное проблема действительно в том, что боюсь что-то глобально менять, дабы не развалить то. что есть.
Спасибо за советы!