2010-11-30 37 views
1

grâce à Nick Craver J'ai un joli menu à bascule, mais j'ai trouvé le problème que si les utilisateurs continuent à cliquer sur de nouveaux menus la page sera continuer à croître dont je ne veux pas, donc l'idée est:jQuery bascule menu cacher/afficher (fermer les autres menus lorsque le nouveau menu s'ouvre)

comme un menu s'ouvre, tous les menus actuellement ouverts à fermer.

La source complète est @http://the-dot.co.uk/new/

voici 2 extraits du code que je utilise.

et la structure HTML est

<ul class="navigation"> 
    <li><a name="us" title="us">Us</a></li> 
    <li id="us">about thedot</li> 
    <li><a name="portfolio" title="portfolio">Portfolio</a></li> 
    <li></li> 
    <li><a name="contact" title="contact">Contact</a></li> 
    <li id="contact">contact deets 
    </li> 
    <li><a name="twitter" title="twitter">Twitter</a></li> 
    <li id="twit">some twitter shit</li> 
    <li><a href="#">Blog</a></li> 
    </ul> 

grâce.

+0

quelle est votre question? –

+0

le 1er n 2ème paragraphe explique le problème et ce que je veux :) – Owen

Répondre

5

Vous pouvez faire quelque chose comme ceci:

$(function() { 
    $("ul li a").click(function() { 
     $(this).parent().next().toggle("fast").siblings("[id]").hide("fast"); 
    }); 
}); 

You can test it out here, ce que cela fait, il bascule le frère <li> encore, mais regarde alors son.siblings() qui ont un attribut ID et les .hide() se montrent.


Si le balisage est pas verrouillé, vous pouvez simplifier davantage comme ceci:

<ul class="navigation"> 
    <li class="toggle">Us</li> 
    <li class="content">about thedot</li> 
    <li class="toggle">Portfolio</li> 
    <li class="content"></li> 
    <li class="toggle">Contact</li> 
    <li class="content">contact deets</li> 
    <li class="toggle">Twitter</li> 
    <li class="content">some twitter shit</li> 
    <li><a href="#">Blog</a></li> 
</ul> 

Et script comme ceci:

$(function() { 
    $("li.content").hide(); 
    $("ul.navigation").delegate("li.toggle", "click", function() { 
     $(this).next().toggle("fast").siblings(".content").hide("fast"); 
    }); 
}); 

Il est une question de préférence, mais Je trouve cette approche un peu plus propre et plus stylée, check out the result here.

+0

J'écrivais une telle solution merdique par rapport à celui-ci ... – cambraca

+0

Ah, génie :) le 1er bit de code fonctionne parfaitement. J'ai en fait beaucoup de php et d'autres choses dans les menus, donc c'est plus une section de révélation que de menu. et je l'ai trouvé quand je l'ai réécrit pour entrer dans la deuxième alternative qui est beaucoup plus ordonnée qu'elle a joué avec beaucoup d'autres styles. donc merci, mais je vais utiliser votre première réponse :) MERCI TOUT JAMAIS :) – Owen