Выпадающее меню не отрабатывает cookie

147
03 ноября 2018, 00:20

Моя задача состоит в том, чтобы меню запоминало текущее состояние, когда открыт целый "аккордеон" и при переходе по ссылке на определенный сегмент товара, запоминало состояние "аккордеона".
HTML не полный, так как сейчас стоит цель прийти к реализации запоминания при открытии хотя бы 1-lvl меню.
Индекс куки принимает и вроде бы как отдаёт, но запоминание состояния не происходит.
Где я туплю ?

Js code :

 $(document).ready(function () {
  var checkCookie = $.cookie('nav-item');
  if (checkCookie != null) {
    $('#nav > ul:eq('+checkCookie+')').show();
  }
  $('#nav > li > a').click(function(){
      var navIndex = $('#nav > li > a').index(this);
      $.cookie('nav-item', 'navIndex'); 
    }); 
  $('#nav > li > span').click(function(){
      var navIndex = $('#nav > li > span').index(this);
      $.cookie('nav-item', navIndex);
    });
    $('#nav > li > span').click(function() {
        $("#nav ul").toggleClass('active');
    });
}); 

HTML code:

<div class="menu-categories-container">
        <ul id="nav">
            <li class="menu-item-has-children-1"><span class="open-lvl-1"></span><a href="#">Изделия из дерева
                </a>
            <ul class="menu-lvl-1">
                <li><a href="">Декор</a></li>
                <li><a href="">Геральдика</a></li>
                <li><a href="">Двери</a></li>
                <li><span class="open-lvl-1"></span><a href="">Декоративное панно</a></li>
                <li><a href="">Рамы и зеркала</a></li>
                <li class="menu-item-has-children-lvl-2">
                    <span class="open-lvl-1"></span>
                    <a href="">Резные лестницы из<br> дерева</a>
                    <ul class="menu-lvl-2">
                            <li><a href="">Балясины резные</a></li>
                            <li><a href="">Заходные столбы</a></li>
                    </ul>
                </li>
                <li><span class="open-lvl-1"></span><a href="">Религия</a></li>
                <li><a href="">Токарная обработка</a></li>
                <li><a href="">Часы</a></li>
            </ul>
        </li>
            <li class="menu-item-has-children-2"><span class="open-lvl-1"></span><a href="#">Художественное литьё</a>
        </li>
        </ul>
    </div>
Answer 1

Используйте localStorage:

Сохранить значение:

localStorage.menuIndex = $(this).closest('li').index();

Загрузить значение:

let index = localStorage.menuIndex || 0;

Fiddle

А ваша ошибка в том, что вы пытаетесь получить индекс элемента(a, span), который лежит в контейнере в одиночестве.

Нужно запрашивать index() именно у li:

$(this).closest('li').index();
// или
$('#nav > li > span').parent().index();
READ ALSO
Опциональные символы в маске ввода JS

Опциональные символы в маске ввода JS

Есть форма, в которую нужно вводить номер банковской карты

205
SVG изменить цвет и добавить :hover

SVG изменить цвет и добавить :hover

Помогите, пожалуйста, изменить цвет SVG и сделать так, что бы на hover цвет менялсяCss изменить не получается, или это только прописать на JS возможно?...

267
Добавить новую таблицу в knex.js

Добавить новую таблицу в knex.js

Есть база данных в postgresql и 10 таблиц, теперь необходимо добавить еще пару таблиц, в файле migrationjs

186
Как обнулить input после записи в перемунную?

Как обнулить input после записи в перемунную?

Записали в zum значение которое выбрал пользователь, как обнулить значение input после нажатия?

200