2010-03-02 5 views
0

여기 내 코드는 다음과 같습니다 그것은 기억 현재 열려있는 메뉴는 각 페이지로드 그 메뉴를 재개하기 위해 쿠키를 사용하는 메뉴 시스템의 JSjQuery - eq()는 index()와 다른 요소를 참조하는 것 같습니다. :/

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() 호출은 둘 다 1이 아니라 인덱스 2를 엽니 다.이 둘은 모두 0부터 시작하는 인덱스로되어 있으므로이 작업을 수행해야하는 이유는 없습니다.

아이디어가 있으십니까?

답변

1

확인. 나는 그것이 필요했던 곳인 >을 추가했다. 또한 우리가 잡는 index() 번호는 클래스가없는 ul.menu 아래의 첫 번째 li을 고려했습니다. 그건 괜찮지 만 난 그냥 우리가하지이 당신을 위해 작동하는 방법을 알려주세요 li.parent

에 수집을 제한 ul.menu에서 li의 전체 집합에 인덱스를 설정해야했습니다.

$(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); 
    }); 

...이 ul.menu의 자식 인 li 요소의 인덱스를 받고있는 것으로 보인다.

동안이 코드 :

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

... 위의 인덱스를 사용하는 것으로 보이지만, (당신이 쿠키에 저장 인덱스의 자식 인 ul) 요소의 다른 세트에 .

그래서 ul.menu li의 색인을 가져다가 ul.menu li ul에 사용하는 것 같습니다.

+0

첫 번째 코드 블록은 각 'ul.menu li'의 첫 번째 하위 UL의 색인을 가져야합니다. 아니요? 동일한 UL을 참조하기 위해 두 코드 블록을 어떻게 일치시킬 수 있습니까? :/ – dave

+0

'wookie + =', '+ jQuery (this) .parent() .index();'가'parent '의 색인을 가져 오는 것을 제외하고는'ul' (이것은'li'입니다). 'parent()'를 없애면'ul' 자체의 인덱스를 얻을 수 있습니다. – user113716

+0

빠른 답변을 기다리고 싶지 않았어 ... 건배 :> 부모()를 제거하여 그냥 jQuery (this) .index()를 당기고 있지만 여전히 잘못된 메뉴 항목을 여는 것입니다. – dave

관련 문제