2017-11-13 6 views
0

Umbraco의 면도기 스크립트로 드롭 다운 시스템을 만들었습니다. 나는 마침내 모든 아이들을 일하게 만들었지 만 드롭 다운 목록이어야하는 하위 항목을 숨기려면 어떻게해야합니까? 나는 자바 스크립트로 무언가를 시도했지만 각 개별적으로 대신 모든 드롭 다운을 여는 것처럼 보였다.드롭 다운 표시 자바 스크립트

image

하위 Subtest1 2 개의 요구를 우리까지 숨길 수 :

function myFunction(a) { 
    var itemcount = a.parentNode.getElementsByClassName("sub").length; 
    for (i = 0; i < itemcount; i++) { 
     a.parentNode.getElementsByClassName("sub")[i].classList.toggle("show"); 
    } 
} 

이 그것을 표시 무엇 :

<div class="col-sm-3"> 
    <div class="well well-lg span-padding extra-padding top background-light"> 
    <ul class="nav nav-list tree"> 
     @ { 
     var documentRootNodeId = Model.Content.GetPropertyValue("documentRoot", true); // Fetch recursive document root id. 
     var selection = Umbraco.TypedContent(documentRootNodeId).Children.Where("Visible"); // Select all nodes below the document root. 
     } 
     @foreach(var item in Model.Content.Ancestor(1).Descendants("menu")) { 
     foreach(var ItemChild in @item.Children("hoofdstuk")) { 
     <li> @ItemChild.Name </li> 
      foreach(var Subitem in @ItemChild.Children) { 
      <li><a href = "@Subitem.Url"> @Subitem.Name </a></li> 
       if (Subitem.Children.Any()) { 
       foreach(var Finalitem in @Subitem.Children) { 
        <ul> 
        <li> < a href = "@Finalitem.Url" > @Finalitem.Name </a></li> 
        </ul> 
       } 
       } 
      } 
      } 
     } 
     } 
    </ul> 
    </div> 
</div> 

자바 스크립트 : 여기

내 코드입니다 조상 인 SubTest1을 클릭하십시오. sub-subtest9도 마찬가지입니다.

동적으로 작동하지 않는 것 같습니다. javascript로 무언가를 만들면 모든 드롭 다운이 한 번에 열리고 개별적으로 열리지 않습니다.

+0

먼저 자바 스크립트를 제공하고 둘째 클래스를 사용하도록 권하고 ID는 개별 요소를 타겟팅 할 수 있도록합니다. 감사! –

+0

내가 원하는 방식으로 작동하지 않아서 자바 스크립트를 코드에서 제거했습니다. ul에 클래스를 추가하고 자바 스크립트를 사용하여 디스플레이를 변경했습니다. 어쨌든 자바 스크립트 코드를 추가하고 자바 스크립트를 사용하도록 HTML 코드를 조정합니다. – Mik3NL

답변

1

먼저 Visual Studio를 사용하여 코드 문제를 해결하는 것이 좋습니다. html 구조를 수정하고 목록의 요소를 적절히 중첩시켜야합니다. li은 직접 어린이 li으로 유효하지 않습니다.

<div class="col-sm-3"> 
    <div class="well well-lg span-padding extra-padding top background-light"> 
     <ul class="nav nav-list tree"> 
      @{ 
       var documentRootNodeId = Model.Content.GetPropertyValue("documentRoot", true); // Fetch recursive document root id. 
       var selection = Umbraco.TypedContent(documentRootNodeId).Children.Where("Visible"); // Select all nodes below the document root. 
      } 
      @foreach (var item in Model.Content.Ancestor(1).Descendants("menu")) 
      { 
       foreach (var ItemChild in item.Children("hoofdstuk")) 
       { 
        <li class="item"> 
         @if (ItemChild.Children.Any()) 
         { 
          <ul class="submenu"> 
           @foreach (var Subitem in ItemChild.Children) 
           { 
            <li class="item"> 
             <a href="@Subitem.Url"> @Subitem.Name </a> 
             @if (Subitem.Children.Any()) 
             { 
              foreach (var Finalitem in Subitem.Children) 
              { 
               <ul class="submenu"> 
                <li> <a href="@Finalitem.Url"> @Finalitem.Name </a></li> 
               </ul> 
              } 
             } 
            </li> 

           } 
          </ul> 
         } 
        </li> 
       } 
      } 
     </ul> 
    </div> 
</div> 

그런 다음 jQuery를 사용하면 쉽게 하위 메뉴를 표시 할 수 있습니다. 하위 메뉴의 첫 번째 수준을 검색 할 수 [children][1]를 사용

.submenu{ 
    display: none; 
} 

: 더 코드를 만들기 위해

$(".item").click(function(){ 
    $(this).children(".submenu").toggle(); //it will display or hide your submenu when clicking the item. 
}); 

그리고 당신의 하위 메뉴는 기본적으로 숨겨져 야, 당신은 CSS로 그렇게 할 수 있습니다 Razor 도우미를 사용하여 하위 목록에 대한 재귀 함수를 만드는 것이 좋습니다.

+0

Visual Studio를 사용할 수 있으면 좋지만 사이트를 호스팅하는 서버에 대한 액세스 권한이 없습니다. 코드가 작동하는 것처럼 보이지만 탐색 모음 전체가 사라집니다. 문제를 해결하고 변경 사항을 적용 할 수 있는지 확인해 보겠습니다. – Mik3NL

+0

나는 당신의 코드에 대해 약간의 개조 만하면된다. 고맙습니다! – Mik3NL

+0

안녕하세요, 제가 지금 가지고있는 유일한 문제는 드롭 다운 메뉴 중 하나를 탐색 한 후에 드롭 다운 메뉴를 다시 열어야한다는 것입니다. 어떻게 수정해야합니까? – Mik3NL