2016-09-16 8 views
1

親がクリックされたときに枝を表示/崩壊できるような構造のようなツリーを作ろうとしています。私がこれまでに試したところでは、ツリーのアイテムがクリックされたときにツリー全体が崩壊するのを防ぐことはできないと思われ、ルート要素だけが残っています。私はクラスの代わりにユニークなIDを使用して、私は子供、親、兄弟、ルートul、すべてのul、クラスに持っているとしよう...何も私のために働いた。常にこの奇妙な行動、エラー、または何も。親がクリックされたときに子を切り替えます

ビュー:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('.tree').click(function() { 
      $(this).find('ul').slideToggle(); 
     }); 
    }); 
</script> 

<h2>testArbre</h2> 

<ul> 
    <li class="tree"> 
     @Model.Name 
     @ShowTree(@Model) 
    </li>  
</ul> 

@helper ShowTree(Tree tree) 
{ 
    <ul> 
     @foreach (var branch in tree.Branch) 
     { 
      <li class="tree"> 
       @branch.Name 
       @if (branch.Branches.Any()) 
       { 
        @ShowTree(branch) 
       } 
      </li> 
     } 
    </ul> 
} 

モデル:

public class ArbreDroits 
    { 
     public string Name { get; set; } 
     public List<Tree> Branches { get; set; } 

     public Tree(string name) 
     { 
      Name = name; 
      Branches = new List<Tree>(); 
     } 

     public ArbreDroits AddBranch(string name) 
     { 
      Branches.Add(new Tree(name)); 

      return Branches.Last(); 
     } 
    } 

生成されたHTMLは次のようになります。

<ul> 
    <li class="tree"> 
     racine 
     <ul> 
      <li class="tree"> 
       noeud1 
       <ul> 
        <li class="tree"> 
         noeud1Fils1 
        </li> 
        <li class="tree"> 
         noeud1Fils2 
         <ul> 
          <li class="tree"> 
           noeud1Fils2Fils1 
           <ul> 
            <li class="tree"> 
             noeud1Fils2Fils1Fils1 
            </li> 
           </ul> 
          </li> 
         </ul> 
        </li> 
        <li class="tree"> 
         noeud1Fils3 
        </li> 
       </ul> 
      </li> 
      <li class="tree"> 
       noeud2 
      </li> 
     </ul> 

    </li>  
</ul> 
+1

ASP.NETコードはここではまったく関係ありません...このコードに生成されたHTMLを追加して、実際のモデルを作成できますか? –

+0

これは、クリックイベントの伝播と関係があると思います...しかし、少なくともレンダリングされたHTMLマークアップを提供します。EDIT: '.tree'要素が他の' .tree'要素の中に入れ子になっていますか?もしそうなら、あなたは '$(this).children( 'ul')。slideToggle();'とイベントの伝播を止めるべきです –

答えて

3

私の賭けあなたが停止イベントの伝播をクリックして、唯一の直接の対象とする必要があります子孫使用children()

$(document).ready(function() { 
    $('.tree').click(function(e) { 
    e.stopPropagation(); 
    $(this).children('ul').slideToggle(); 
    }); 
}); 
関連する問題