установить jQuery cookie для каждого флажка

0

У меня есть простая функция jQuery, которая переключает классы на основе состояний флажка. Здесь код:

JQuery:

  $('input[name$="bg-noise-option"]').click(function(){
    var targetClass = $(this).data('at');
    $('.' + targetClass).toggleClass('bg-noise');
  });

HTML:

  <div class="checkbox">
    <label>
      <input type="checkbox" name="bg-noise-option" data-at="page-wrap" checked>
      Body <br>
    </label>
    <label>
      <input type="checkbox" name="bg-noise-option" data-at="btn">
      Elements <br>
    </label>
    <label>
      <input type="checkbox" name="bg-noise-option" data-at="header, .navbar">
      Top Header <br>
    </label>
    <label>
      <input type="checkbox" name="bg-noise-option" data-at="page-header-wrap">
      Page Header <br>
    </label>
    <label>
      <input type="checkbox" name="bg-noise-option" data-at="site-footer">
      Footer <br>
    </label>
  </div>

Вопрос: Как создать cookie для каждого флажка? Я просто пытаюсь дать этим флажкам некоторую память... не уверен в лучшем способе.

Я подозреваю, что какой-то тип .each(function) должен это сделать, но я все еще довольно начинающий javascript. Я пробовал следующее:

$.each(function(){
  $.cookie('bg-noise-cookie', $(this).data('at'), {expires:365, path: '/'});
})

Но, конечно, это создает только один куки файл для последней проверенной коробки. Как создать уникальный файл cookie для каждого? Или мне даже нужно? Возможно, есть способ сохранить их в одном файле cookie (массив?), А затем просто ссылаться на массив на загрузку страницы, чтобы проверить флажки?

Очень важно для понимания.

  • 0
    Почему бы не создать строку json, и каждый раз, когда пользователь нажимает на флажок, создается новая строка json, которая хранит данные всех выбранных в данный момент флажков и заменяет текущее значение cookie. Затем, когда страница перезагрузится, вы можете использовать этот json, чтобы проверить, какие из них нужно проверить. Таким образом, вам нужен только один файл cookie для всех из них.
  • 0
    @RagingCelt, мне нравится этот подход ... очень чистый. Даже не приходило мне в голову. Но у меня нет опыта работы с .json из javascript. Возможно, вы могли бы включить необходимый код в ответ? В противном случае, возможно, вы могли бы поделиться некоторыми полезными ресурсами для такого подхода? Большое спасибо.
Показать ещё 2 комментария
Теги:
cookies
checkbox

1 ответ

1
Лучший ответ

Предполагается, что вы используете JQuery Cookie Plugin, так как я вижу, что вы ссылались на него в своем вопросе.

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

При загрузке страницы он извлекает эту строку JSON, закрывает ее обратно на объект и затем перебирает, применяя проверку в поле любого подходящего атрибута.

Код протестирован и работает.

HTML: я добавил '[]' в свои флажки, чтобы правильно группировать их и удалять отмеченные по умолчанию флажки.

<div class="checkbox">
    <label>
        <input type="checkbox" name="bg-noise-option[]" data-at="page-wrap">
        Body <br>
    </label>
    <label>
        <input type="checkbox" name="bg-noise-option[]" data-at="btn">
        Elements <br>
    </label>
    <label>
        <input type="checkbox" name="bg-noise-option[]" data-at="header, .navbar">
        Top Header <br>
    </label>
    <label>
        <input type="checkbox" name="bg-noise-option[]" data-at="page-header-wrap">
        Page Header <br>
    </label>
    <label>
        <input type="checkbox" name="bg-noise-option[]" data-at="site-footer">
        Footer <br>
    </label>
</div>

JQuery: использование плагина $.cookie()

<script type="text/javascript">
    $(document).ready(function() {
        // check for cookie on load
        if( $.cookie('chk_ar') ) {
            console.log($.cookie('chk_ar'));
            var chk_ar = $.cookie('chk_ar');

            // convert string to object
            chk_ar = $.parseJSON(chk_ar);
            console.log(chk_ar);

            // loop through and apply checks to matching sets
            $.each(chk_ar, function(index, value) {
                console.log(value);
                $('input').filter('[data-at="'+value+'"]').prop('checked', true);
            });
        }
    });

    // handle checkboxes
    $('input[name="bg-noise-option[]"').on('click', function() {
        var check_array = [];

        // add to array
        $(':checked').each(function() {
            check_array.push($(this).attr('data-at'));
        });

        // stringify array object
        check_array = JSON.stringify(check_array);
        console.log(check_array);

        // set cookie
        $.cookie('chk_ar', check_array, {path:'/'});
    });
</script>
  • 0
    большое спасибо за это. Будучи новичком в javascript, мне потребовалось некоторое время, чтобы разобраться. Я не упомянул в моем вопросе , что эти флажки в переключаемой DIV, с помощью простого off и on радио тумблер для показа / скрытия его. Это добавило некоторую сложность, но я наконец-то заработал. Можно опубликовать код, если он будет полезен для других, но воздержится, если не будет запрошено, поскольку это выходит за рамки моего вопроса. Anways, опять же, большое спасибо. Теперь я немного знаю о хранении и разборе JSON :)
  • 0
    Рад, что смог помочь. Поначалу Javascript (или любой другой язык) может быть довольно пугающим, но как только он щелкает, удивительно, насколько все просто на самом деле. Самое сложное - следовать логике. Я мог бы быть немного более объяснительным, когда я комментирую свой код на этом сайте для новичков. :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню