Добавление класса стилей в DOM дерево - toggle не красится после нажатия на кнопку "Далее"

Всем привет. Реализовал переключатель (toggle), который открывает (статус страницы isDeviceLockEnabled = true) или скрывает функционал на странице (статус страницы isDeviceLockEnabled = false).

В момент клика по переключателю (если страница была выкл, то цвет переключателя серый) слайдер смещается в права и поле- фон переключателя меняется с серого на синий.

Открывается модальное окно с просьбой ввести пароль-подтверждение. На окне две кнопки (отменить\продолжить). При клике на продолжить- модалка скрывается, открывается доп функционал страницы, (статус страницы стал isDeviceLockEnabled = true) , тогл должен быть синего цвета, но становится серым.
Прикладываю код разметки:


     <label class='form-switch'>
       <input type='checkbox' name='toggle-device-lock' id='toggle-device-lock' 
         class="form-check-input" 
            {{#isDeviceLockEnabled}}checked{{/isDeviceLockEnabled}} 
                />
              <span class="form-switch-slider" for='toggle-device-lock'></span>
      </label> 
    <button class='button button-secondary button-small cancel'>{{ cancelButton }}</button>
    <button class='button button-dark-grey-disabled button-small device-pin-new-continue'>{{ continueButton }}</button>

Логика окрашивания переключателя следующая: кликаем по переключателю, проходит проверка состояния блок\разблок, если окно заблокировано, то добавляем класс active (.form-switch-slider.active) в разметку, который окрашивает в синий цвет. Если мы из активного переключаем в неактивно, то тогл окрашиваем из синего в серый.


       toggleDeviceLock(e) {     
          e.preventDefault();
          const enterPinView = new window.Whisper.EnterPinView({
            step: !this.isDeviceLockEnabled() ? 1 : 2, // 1 - enable lock, 2 - disable lock
            enableLock: this.enableDeviceLock.bind(this),
            disableLock: this.disableDeviceLock.bind(this),
            pinLength: this.pinLength,
          }).render();
        
          $('body').append(enterPinView.el);
        
          const toggleCheckbox = document.getElementById('toggle-device-lock');
          const slider = document.querySelector('.form-switch-slider');    
        
          if (toggleCheckbox.checked && !this.isDeviceLockEnabled()) {  
            slider.classList.add('active'); 
          } 
    
          const continueButton = enterPinView.el.querySelector('.device-pin-new-continue');
          continueButton.addEventListener('click', () => {      
            if (toggleCheckbox.checked && !this.isDeviceLockEnabled()) {          
    
              slider.classList.add('active'); 
            } else {      
              slider.classList.remove('active'); 
            } 
          });    
          
          const cancelButton = enterPinView.el.querySelector('.button-secondary.cancel');
          cancelButton.addEventListener('click', () => {      
            this.render();         
          });      
        },

Код стилей :


    .form-switch {
        position: relative;
        display: inline-block;
        vertical-align: middle;
        font-size: 14px;
        height: 28px; 
      }  
      
       
      .form-switch-slider.active {
        background: var(--clr-light-2);   // синий
        // background: var( --clr-system-7);    // серый   
      }

Помогите понять, почему при клике по кнопке "Продолжить" заливка переключателя снова становится серой


Ответы (1 шт):

Автор решения: userDS

Решил проблему через манипуляции с CSS.

.form-check-input:checked + .form-switch-slider{ background: var(--clr-light-2); }

Лиссенер на кнопку Продолжить не понадобился.

→ Ссылка