Problème menu accordéon avec jQuery

Eléphant du PHP | 451 Messages

07 oct. 2010, 22:08

Bonsoir,

Voilà je voudrais faire un menu accordéon mais il veut pas fonctionner lol.

Le principe c'est qu'il ferme les éléments ouvert pour ouvrir celui sur le quel on a cliqué.

Mais voilà moi le premier lien n'as pas de sous menu donc en faites c'est ça qui fait tout bugger chez moi car quand je clique pour faire apparaitre le sous-menu il s'ouvre mais il se referme direct. Par contre quand je fais en sorte que un sous menu soit ouvert au départ là magie ça fonctionne. Donc c'est que c'est mon premier lien qui fou le bordel car y a pas de sous menu.

Voici mon code html:
			<ul>
				<li class="active">
					<span><a href="">Accueil</a></span>
				</li>
			
				<li >
					<span>News</span>
					
					<ul>
						<li >
							<a href="">Voir toute les news</a>
						</li>
						<li >
							<a href="">Créer une news</a>
						</li>
						<li >
							<a href="">Gérer les catégories</a>
						</li>
						<li >
							<a href="">Gérer les commentaires</a>
						</li>
					</ul>
				</li>
				<li >
					<span>News</span>
					
					<ul>
						<li >
							<a href="">Voir toute les news</a>
						</li>
						<li >
							<a href="">Créer une news</a>
						</li>
						<li >
							<a href="">Gérer les catégories</a>
						</li>
						<li >
							<a href="">Gérer les commentaires</a>
						</li>
					</ul>
				</li>
</ul>
Et voici mon js:
	$('.sidebar .menu ul ul').hide();
	$('.sidebar .menu ul li.active ul').show();
	
	$('.sidebar .menu ul li span').css({'cursor' : 'pointer'});
	
	$('.sidebar .menu ul li').click(function () {
		if($(this).find("ul:visible").length != 0) { 
            $(this).find("ul").slideUp(150); 
        } else { 
            $(".sidebar .menu ul li ul").slideUp(150); 
            $(this).find("ul").slideDown(200); 
       }
       
       return false;
	});
Moi ça fait deux heures que je recherche et je trouve pas la solution donc je me remet à vos connaissance.

Merci d'avance...

Mammouth du PHP | 19672 Messages

08 oct. 2010, 17:12

Je dis ça à l'arrache, mais j'explorerais le fait que dans ton else, tu sélectionnes tous les ul, du sous-menu. Essaye avec « not »
    $('.sidebar .menu ul ul').hide();
    $('.sidebar .menu ul li.active ul').show();
    $('.sidebar .menu ul li span').css({'cursor' : 'pointer'});
    $('.sidebar .menu ul li').click(function () 
    {
        if($(this).find("ul:visible").length !== 0) 
        {
            $(this).find("ul").slideUp(150);
        }
        else
        {
            $(".sidebar .menu ul li ul").slideUp(150);
            $(this).find("ul:not(:visible)").slideDown(200); // On ne sélection que si le UL n'est pas visible
        }
        return false;
    });
Sans garantie, j'ai pas testé.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 451 Messages

08 oct. 2010, 19:48

Même avec le not ça fonctionne toujours pas.

Le problème reste identique.

Mammouth du PHP | 19672 Messages

08 oct. 2010, 19:49

C'est du code maison ou un plugin téléchargé ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 451 Messages

08 oct. 2010, 20:25

C'est du code maison.

En faites j'aimerais juste qu'un sous-menu s'ouvre quand je clique et que ceux ouvert ce referme avant d'ouvrir l'autre.

Mammouth du PHP | 19672 Messages

08 oct. 2010, 20:31

Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 451 Messages

08 oct. 2010, 20:39

C'est tout à fait ça merci Cyrano je vais prendre leur code.

Bonne soirée ++