2009-04-15 10 views
2

hey all - mon deuxième jour de tenter jquery sur une tâche au travail, et je suis un peu coincé.sur click toggle ul - on cliquez ailleurs hide ul

j'ai une liste non ordonnée de liens .. à l'intérieur d'une liste non ordonnée de liens

sur un <li class="headlink"> cliquant, je voudrais enfant du <li class="headlink"><ul> pour devenir visible.

en cliquant loin (n'importe où sur le document), je voudrais que l'enfant <ul> disparaisse.

Par défaut, l'enfant <ul> est masqué dans la feuille de style.

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> 

problème - quand je clique sur un <li class="headlink">, je reçois l'effet yoyo, où l'enfant UL apparaît - et se cache.

tout conseil très apprécié.

Répondre

4

Vous devez empêcher l'événement de se propager à l'organisme:

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

Et pour cacher les éléments courants ouverts:

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

Cela semble familier :) – cgp

+0

merci - ça marche - bien presque .. détails sous altCognitos a nswer – raq

+0

Voir ma réponse mise à jour pour obtenir l'effet recherché. – Seb

1

Cela corrigera le problème de l'effet « yo-yo » : (annuler la propagation)

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

lol, juste quelques secondes plus tôt;) – Seb

+0

manythanks .. ok, ça marche .. mais j'ai plusieurs headlinks avec enfant ELU. maintenant en cliquant sur l'un montre l'enfant UL. cliquant sur un autre - montre son UL ultérieur - mais il ne cache pas l'UL qui a été ouvert précédemment .. Cependant, en cliquant sur se cache tous les enfants UL .. fermer mais pas de cigare .. :) – raq

+0

Je pense que vous Nous avons besoin ici d'un meilleur sélecteur. Utilisez un identifiant associé à un sélecteur parent et je pense que vous obtiendrez plus de précision dans votre ciblage. – cgp

Questions connexes