2009-10-13 8 views
0

J'utilise 4 lien (bouton de sous-menu) sur mon site. Chaque lien ouvre un tag DIV.Jquery - Toggle, Show - besoin d'attendre avant le prochain effet

Cette statistique par défaut des balises DIV est masquer. (Avec jquery)

$('div[class*="my_"]').hide(); 

Après avoir cliqué sur un sous-menu puis je montre() la balise div i need:

$('a#submenu_1').click(function() { 

     $('div[class*="my_"]').hide(); // hide all DIV if some of them opened before 
     $('div.my_submenu_1').toggle('slow'); 
    }); 

C'est bien, jusqu'à ce que je patient pour attendre de se cacher si d'autres DIV est ouvert avant. Mais si je clique trop vite entre les sous-menus, parfois jquery ne peut pas masquer l'étiquette div avant SHOWn la nouvelle.

Mon utilisation de certains .. attente?

Pourriez-vous me proposer quelque chose ?!

Répondre

2

Je suis d'accord avec @Ghommey, mais vous pouvez aussi faire le show dans le cadre du rappel de hide() pour que vous sachiez que tous les autres sont cachés en premier.

$('div[class^="my_"]').stop().hide(0,function() { 
     $('div.my_submenu_1').show('slow'); 
}); 

Notez que vous pourriez probablement réécrire ceci un peu plus génériquement.

$('a.menu').click(function() { 
     var menuID = $(this).attr('href'); 
     $('div.menu').stop().hide(0,function() { 
      $(menuID).show('slow'); 
     }); 
     return false; 
}); 

où votre HTML ressemble à:

<a href="#my_menu_1" class="menu">Menu 1</a> 
<a href="#my_menu_2" class="menu">Menu 2</a> 
... 

<div id="my_menu_1" class="menu">...</div> 
<div id="my_menu_2" class="menu">...</div> 

Cela aurait l'avantage d'avoir le lien fonctionne réellement si javascript ont été désactivé.

+0

Cela causerait des problèmes si vous cliquez très vite, n'est-ce pas? En outre '.stop(). Hide();' est instantané – jantimon

+0

J'utilise stop(). Hide() - c'est juste que j'ai mis le spectacle dans le rappel afin qu'il ne fonctionnera pas à moins que l'animation (cacher) complète. – tvanfosson

+0

... sauf si vous voulez dire la vitesse "normale". J'ai changé cela pour utiliser une valeur numérique (0) - qui devrait être aussi rapide que possible. – tvanfosson