Je viens de trouver une solution à un autre problème que je venais de résoudre, mais cela en a créé un autre. Je travaille sur un menu de navigation à plusieurs niveaux. Voici le script que j'utilise :
$(document).ready(function(){
// attacher le gestionnaire de clic pour le menu
$(".left-navigation-holder li a[href='']:has(~ul)").click(toggleMenu);
// Étendre le menu pour la page actuelle :
var level1Selector = "#" + $("body").attr("menul1");
var level2Selector = "#" + $("body").attr("menul2");
var level3Selector = "#" + $("body").attr("menul3");
$(".left-navigation-holder li a:has(~ul"+ level1Selector +")").click();
$(".left-navigation-holder li a:has(~ul"+ level2Selector +")").click();
$(".left-navigation-holder li a:has(~ul"+ level3Selector +")").click();
});
// fonction de basculement du menu
function toggleMenu() {
//if ($(this).attr(href='#')) {alert("yes")} else {alert("no")}
$(this).siblings("ul").toggle();
$(this).closest("li").toggleClass("selected");
return false;
}
La première ligne initialise le menu en disant que s'il y a un événement de clic sur un lien du menu et que ce lien a un attribut href vide et une liste plus bas, alors il déclenche toggleMenu pour ouvrir ce niveau. La raison de vérifier la valeur de href est que si elle est vide, le menu s'ouvre, sinon il redirige l'utilisateur vers la valeur de l'URL et ne bascule pas le menu. Cela laisse l'option d'avoir un lien de page pour certains menus (et de conserver des sous-niveaux) tandis que d'autres sont simplement là pour basculer le sous-menu.
L'autre partie du script lit les valeurs des attributs que j'ai définis dans la balise body de chaque page (menul1, menul2, menul3) pour savoir sur quelle page du menu nous sommes afin que le menu ouvre les bons niveaux de menu lorsque la page se charge.
Le problème que j'ai c'est que parce que la première ligne vérifie la valeur de l'attribut href, si la page chargée a été appelée en cliquant sur un menu qui avait un lien et un sous-menu, ce dernier ne s'ouvre pas lors du chargement de la page car href a une valeur. Les 3 lignes qui initialisaient chaque niveau ne fonctionnent maintenant que lorsque la valeur href est vide.
Je ne sais pas quoi faire. Votre aide serait appréciée. J'espère que cela a été suffisamment clair.
Merci !