jQuery - eq (), похоже, ссылается на элемент, отличный от index () - Что дает? : / - PullRequest
0 голосов
/ 02 марта 2010

Вот мой код: ОБНОВЛЕНО JS

jQuery(document).ready(function()
{
   var cookieName = 'activeMenus';
   var openMenus  = (jQuery.cookie(cookieName) == null) ? 0 : jQuery.cookie(cookieName).substring(1).split(',');
   var wookie     = '';

   jQuery('ul.menu li ul').css('display', 'none');

   // Reopen all the menus from the cookie
   if (openMenus != 0)
   {
      for (var i = 0; i < openMenus.length; i++)
      {
         alert('Opening: ' + openMenus[i]);
         jQuery('ul.menu li').children('ul').eq(openMenus[i]).css('display', 'block');
      }
   }

   // Hide the menu upon click and modify the cookie
   jQuery('ul.menu span.topdaddy span').click(function()
   {
      // Toggle the menu for the clicked link
      jQuery(this).parents('li').find('ul').slideToggle('slow', function()
      {
         // Once the menu has been toggled - Find all the open menus
         jQuery('ul.menu li').children('ul:visible').each(function()
         {
            wookie += ',' + jQuery(this).index(); // Build the index list
            jQuery.cookie(cookieName, wookie);
         });
      });

      wookie = '';
  });
});

HTML

<ul class="menu">
   <li class="item1">
      <a href="#"><span>Link 1</span></a>
   </li>

   <li class="parent item55">
      <span class="topdaddy"><span>Link 2</span></span>

      <ul>
         <li class="item62">
            <a href="#"><span>Link 3</span></a>
         </li>

         <li class="item63">
            <a href="#"><span>Link 4</span></a>
         </li>
      </ul>
   </li>

   <li class="parent item56">
      <span class="topdaddy"><span>Link 5</span></span>

      <ul>
         <li class="item69">
            <a href="#"><span>Link 6</span></a>
         </li>

         <li class="parent item70">
            <ul>
               <li>asdasd</li>
            </ul>
         </li>
      </ul>
   </li
</ul>

Это система меню, которая использует куки-файлы для запоминания открытых в данный момент меню для повторного открытия этих меню при каждой загрузке страницы.

Код работает ... Но он немного глючит.

Вызов .eq () открывает индекс 2, а не 1. Они оба должны быть индексами, основанными на 0, поэтому я не вижу причин, почему это следует делать.

Есть идеи?

1 Ответ

1 голос
/ 02 марта 2010

Хорошо. Я добавил >, где это было необходимо. Кроме того, номер index (), который мы собирали, учитывал первое значение li в ul.menu, которое не имеет класса .parent. Это нормально, но я просто должен был убедиться, что мы установили индекс для полного набора li в ul.menu, не ограничивая коллекцию li.parent

Дайте мне знать, как это работает для вас.

    $(document).ready(function() {

           var cookieName = 'activeMenus';
           var openMenus  = (jQuery.cookie(cookieName) == null) ? 0 : jQuery.cookie(cookieName).substring(1).split(',');
           var wookie     = '';

           jQuery('ul.menu > li.parent > ul').css('display', 'none');

           if (openMenus != 0) {
              for (var i = 0; i < openMenus.length; i++) {
                 alert('Opening: ' + openMenus[i]);
                jQuery('ul.menu > li').eq(openMenus[i]).children('ul').css('display', 'block');
              }
           }
           jQuery('ul.menu span.topdaddy').click(function() {
              jQuery(this).next().slideToggle('slow', function() {
                 jQuery('ul.menu > li.parent > ul:visible').each(function() {
                    wookie += ',' + jQuery(this).parent().index(); 
                    jQuery.cookie(cookieName, wookie);
                 });
              });
              wookie = '';
          });
    });

Этот код:

jQuery('ul.menu li').children('ul:visible').each(function()
     {
        wookie += ',' + jQuery(this).parent().index(); // Build the index list
        jQuery.cookie(cookieName, wookie);
     });

... похоже, получает индекс элемента li, который является потомком ul.menu.

Пока этот код:

     jQuery('ul.menu li ul').eq(openMenus[i]).css('display', 'block');

... похоже использует индекс сверху, но для другого набора элементов (ul, который является дочерним по отношению к индексу, который вы сохранили в cookie).

Похоже, вы берете индекс ul.menu li и используете его на ul.menu li ul.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...