2009-04-15 8 views
2

こんにちはすべて - 仕事中の仕事でjqueryを試みる2日目。私は、リンクの順序なしリストを持っているon clickクリックしてul - onをどこか別の場所をクリックするhide ul

は... <li class="headlink">をクリック上のリンク

の順不同のリスト内で、私は<li class="headlink">の子<ul>が見えるようになりたいと思います。

クリックすると(文書のどこにでも)、子供<ul>が消えてしまいます。

デフォルトでは、子の<ul>はスタイルシートで非表示に設定されています。

HTML

<ul id="cssdropdown"> 
    <li><a href="#">A</a></li> 
    <li class="headlink"> 
     <a href="#">B</a> 
     <ul> 
      <li><a href="#">1</a></li> 
      <li><a href="#">2</a></li> 
     </ul> 
    </li> 
    <li><a href="#">C</a></li> 
</ul> 

jqueryの

<script type="text/javascript"> 

    $(document).ready(function(){ 
     $('#cssdropdown li.headlink').click(
      function() { $('ul', this).toggle("slow"); }); 
    }); 


    $(document).ready(function(){ 
     $('body').click(function() { 
      $('li ul:visible').hide("slow") }) }); 

</script> 

問題 - して、自分自身を隠す - 私は<li class="headlink">をクリックしたとき、私は子供ULが表示されているヨーヨー効果を得ます。

何かアドバイスをいただければ幸いです。

答えて

4

あなたは後ろ身頃に伝播するイベントを防ぐ必要があります。

$(document).ready(function(){ 
    $('#cssdropdown li.headlink').click(function(event) { 
     $('ul', this).toggle("slow"); 
     event.stopPropagation(); 
    }); 
}); 

をし、現在開いている項目を非表示にする:

$(document).ready(function(){ 
    $('#cssdropdown li.headlink').click(function(event) { 
     $(this).siblings(".headlink").hide("slow"); 
     $('ul', this).toggle("slow"); 
     event.stopPropagation(); 
    }); 
}); 
+0

これはよく似ています:) – cgp

+0

ありがとう - それはうまくいっています。詳細はaltCognitos a nswer – raq

+0

あなたが探している効果を得るために私の更新された答えを見てください。 – Seb

1

これは、「ヨーヨー」効果のために問題を修正します:(伝播をキャンセルする)

$(document).ready(function(){ 
    $('#cssdropdown li.headlink').click(
     function(event) { 
      $('ul', this).toggle("slow"); 
      event.stopPropagation() 
     }); 
}); 
+0

lol、ちょうど数秒前;) – Seb

+0

manythanks .. OKですが、私は子ULと複数のヘッドリンクを持っています。 1つをクリックすると、子供のULが表示されます。別のものをクリックすると次のULが表示されますが、それ以前に開かれたULは隠されません。 クローズではなくシガーです。:) – raq

+0

私はあなたここで必要なのは、より良いセレクターです。親セレクタと組み合わせたIDを使用すると、ターゲティングの精度が向上すると思います。 – cgp

関連する問題