Bonjour à tous,
J'ai suivi le tutoriel à la page : http://www.alsacreations.com/tuto/lire/602-Creer-un-menu-accordeon-avec-jQuery.html
Cela fonctionne assez bien en ce qui concerne le masquage des sous-menus.
J'ai meme adapté le code à un second niveau de sous-menu.
Cependant, je n'ai pas compris comment faire pour garder le sous-menu ouvert après avoir cliqué sur un des liens fils de ce sous-menus et, donc, après avoir chargé une nouvelle page.
Dans l'exemple du tuto, il faudrait que, si je clique sur "Item 2.1", le sous-menu "Item 2" reste ouvert quand la page "Item 2.1" est chargée.
Visiblement, cela doit être très simple puisque Thomas D. qui a rédigé le tuto passe très vite sur cette partie.
Trop vite pour moi.
Je n'ai en particulier, pas compris comment se servir de la classe open_at_load.
Concrêtement, pour ce que je veux faire, il me faudrait utiliser une variable de session =>
1) Stocker le sous-menu (son Id ?) dans une variable de session lorsque je clique dessus et l'ouvre.
2) Puis récupérer cette valeur de session après avoir cliqué sur un des liens fils.
3) Et réouvrir ce sous-menu une fois la page référencée par le lien fils ouverte, en utilisant la valeur précédemment récupérée.
Merci d'avance pour l'aide que vous voudrez m'apporter.
De mon coté, je partage le code pour ajouter un second niveau de sous-menus, des fois que cela serve (ou que vous y voyiez d'horribles erreurs !
)
Le menu HTML se présente alors ainsi :
Il faut aussi penser à rajouter les styles pour .menu li.toggleSubSubMenu{}, .menu .subsubMenu{} et .menu ul.subsubMenu a {}
Cette méthode pour ajouter un second niveau de sous-menu au tuto de Thomas D. semble fonctionner mais je n'ai bien évidemment pas fait de tests poussés puisque je viens de l'écrire.
Modifié par Wault (15 Mar 2010 - 18:02)
J'ai suivi le tutoriel à la page : http://www.alsacreations.com/tuto/lire/602-Creer-un-menu-accordeon-avec-jQuery.html
Cela fonctionne assez bien en ce qui concerne le masquage des sous-menus.
J'ai meme adapté le code à un second niveau de sous-menu.
Cependant, je n'ai pas compris comment faire pour garder le sous-menu ouvert après avoir cliqué sur un des liens fils de ce sous-menus et, donc, après avoir chargé une nouvelle page.
Dans l'exemple du tuto, il faudrait que, si je clique sur "Item 2.1", le sous-menu "Item 2" reste ouvert quand la page "Item 2.1" est chargée.
Visiblement, cela doit être très simple puisque Thomas D. qui a rédigé le tuto passe très vite sur cette partie.
Trop vite pour moi.

Je n'ai en particulier, pas compris comment se servir de la classe open_at_load.
Concrêtement, pour ce que je veux faire, il me faudrait utiliser une variable de session =>
1) Stocker le sous-menu (son Id ?) dans une variable de session lorsque je clique dessus et l'ouvre.
2) Puis récupérer cette valeur de session après avoir cliqué sur un des liens fils.
3) Et réouvrir ce sous-menu une fois la page référencée par le lien fils ouverte, en utilisant la valeur précédemment récupérée.
Merci d'avance pour l'aide que vous voudrez m'apporter.

De mon coté, je partage le code pour ajouter un second niveau de sous-menus, des fois que cela serve (ou que vous y voyiez d'horribles erreurs !

jQuery(document).ready( function () {
// On cache les sous-menus :
// sauf celui qui porte la classe "open_at_load" :
jQuery(".menu ul.subMenu:not('.open_at_load')").hide();
// On sélectionne tous les items de liste portant la classe "toggleSubMenu"
// et on remplace l'élément span qu'ils contiennent par un lien :
jQuery(".menu li.toggleSubMenu span").each( function () {
// On stocke le contenu du span :
var TexteSpan = jQuery(this).text();
jQuery(this).replaceWith('<a href="" title="Ouvrir le sous-menu '+TexteSpan+'">' + TexteSpan + '<\/a>');
} ) ;
// On modifie l'évènement "click" sur les liens dans les items de liste
// qui portent la classe "toggleSubMenu" :
jQuery(".menu li.toggleSubMenu > a").click( function () {
// Si le sous-menu était déjà ouvert, on le referme :
if (jQuery(this).next("ul.subMenu:visible").length != 0) {
jQuery(this).next("ul.subMenu").slideUp("fast", function () { $(this).parent().removeClass("open") });
}
// Si le sous-menu est caché, on ferme les autres et on l'affiche :
else {
jQuery(".menu ul.subsubMenu").hide();
jQuery(".menu ul.subMenu").slideUp("fast", function () { $(this).parent().removeClass("open") });
jQuery(this).next("ul.subMenu").slideDown("fast", function () { $(this).parent().addClass("open") });
}
// On empêche le navigateur de suivre le lien :
return false;
});
/* GESTION DU SECOND NIVEAU DANS LE MENU
*************************************/
// On cache les sous-sous-menus :
jQuery(".menu ul.subsubMenu").hide();
// On modifie l'évènement "click" sur les liens dans les items de liste
// qui portent la classe "toggleSubSubMenu" :
jQuery(".menu li.toggleSubSubMenu > a").click( function () {
// Si le sous-sous-menu était déjà ouvert, on le referme :
if (jQuery(this).next("ul.subsubMenu:visible").length != 0) {
jQuery(this).next("ul.subsubMenu").slideUp("fast", function () { $(this).parent().removeClass("open") });
}
// Si le sous-menu est caché, on ferme les autres et on l'affiche :
else {
jQuery(".menu ul.subsubMenu").slideUp("fast", function () { $(this).parent().removeClass("open") });
jQuery(this).next("ul.subsubMenu").slideDown("fast", function () { $(this).parent().addClass("open") });
}
// On empêche le navigateur de suivre le lien :
return false;
});
} ) ;
Le menu HTML se présente alors ainsi :
<ul class="navigation">
<li><a href="#" title="Aller à la page 1">Item 1</a></li>
<li class="toggleSubMenu"><span>Item 2</span>
<ul class="subMenu">
<li><a href="#" title="Aller à la page 2.1">Item 2.1</a></li>
<li class="toggleSubSubMenu"><span>Item 2.2</span>
<ul class="subsubMenu">
<li><a href="#" title="Aller à la page 2.2.1">sous-sous-menu 2.2.1</a></li>
<li><a href="#" title="Aller à la page 2.2.2">sous-sous-menu 2.2.2</a></li>
</ul>
</li>
<li><a href="#" title="Aller à la page 2.3">Item 2.3</a></li>
</ul>
</li>
<li class="toggleSubMenu"><span>Item 3</span>
<ul class="subMenu">
<li><a href="#" title="Aller à la page 3.1">Item 3.1</a></li>
<li><a href="#" title="Aller à la page 3.2">Item 3.2</a></li>
</ul>
</li>
<li><a href="#" title="Aller à la page 4">Item 4</a></li>
</ul>
Il faut aussi penser à rajouter les styles pour .menu li.toggleSubSubMenu{}, .menu .subsubMenu{} et .menu ul.subsubMenu a {}
Cette méthode pour ajouter un second niveau de sous-menu au tuto de Thomas D. semble fonctionner mais je n'ai bien évidemment pas fait de tests poussés puisque je viens de l'écrire.
Modifié par Wault (15 Mar 2010 - 18:02)