jQuery: класс не добавляется при первом нажатии, но работает при последующих щелчках - PullRequest
0 голосов
/ 28 апреля 2019

Я пытаюсь переключить класс light-mode CSS при нажатии #lights, и я хочу сохранить это изменение в файле cookie. Ниже приведено то, что я получил до сих пор, однако для корректной работы требуется, чтобы пользователь дважды щелкнул по нему:

jQuery(document).ready(function($) {
    if ($.cookie('light-mode') == "yes") {
        $("body").addClass("light-mode");
    }
    $("#lights").click(function() {
        if ($.cookie('light-mode') == "undefined" || $.cookie('light-mode') == "no") {
            $.cookie('light-mode', 'yes', {
                path: '/'
            });
            $("body").addClass("light-mode");
        } else {
            $.cookie('light-mode', 'no', {
                path: '/'
            });
            $("body").removeClass("light-mode");
        }
    });
});

Если я не пропускаю что-то простое, проблема может быть связана с логикой использования cookie.

1 Ответ

0 голосов
/ 28 апреля 2019

Возможно, вы могли бы пересмотреть свой подход к разделению переключения класса light-mode и сохранению состояния для соответствующего файла cookie, например, так?

jQuery(document).ready(function($) {
    
    if ($.cookie('light-mode') == "yes") {
        $("body").addClass("light-mode");
    }
    
    $("#lights").click(function() {
    
      /* Toggle the class regardless of cookie state */
      $("body").toggleClass("light-mode");
      
      /* Update cookie value based on current class assignment */
      $.cookie('light-mode', $("body").hasClass("light-mode") ? 'yes' : 'no', { path: '/' });
    });
});
...