Bonjour tout le monde,
J'ai un soucis de détection de clic, ou plutôt de détection de l'élément cliqué.
Voilà le soucis :
- j'ai une liste à deux niveaux représentant un menu
- chaque balise "li" est associée à un lien : un clic sur une balise "li" doit donc charger ce lien
- pour ces liens, je ne veux pas utiliser la balise "a" (de part l'architecture du menu en particulier, rendant impossible cette utilisation pour le niveau 1)
Voici le code HTML :
Afin de prendre en compte les fameux liens, j'ai rajouter un attribut "lien_href" pour chaque "li" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <ul class="topnav"> <li>Niveau 1 - Titre 1</li> <li>Niveau 1 - Titre 2</li> <ul class="subnav"> <li>Niveau 2 - Titre 2.1</li> <li>Niveau 2 - Titre 2.2</li> </ul> <li>Niveau 1 - Titre 3</li> </ul>
Puis ensuite, en javascript, j'applique le lien lorsqu'un clic est détecté sur un "li" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <li lien_href=[mon_lien_ici]>[...]</li>
Ce code fonctionne parfaitement lorsque je clique sur un "li" de Niveau 1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 $("li").click( function(){ window.location.href = $(this).attr("lien_href"); } );
Le soucis vient du fait que lorsque je clique sur un "li" de niveau 2, le lien pris en compte est celui du "li" parent... En fait à ce que je comprend deux clics sont détectés : un premier sur le "li" effectivement cliqué (celui de niveau 2), et un second sur le "li" parent (non cliqué, mais comme on clique sur un de ses fils...?).
J'ai bien tenté d'utiliser la méthode "stopPropagation" ou encore "cancelBubble" mais rien n'y fait, c'est toujours le lien de niveau 1 qui est pris en compte...
En fait dans ma fonction javascript il faudrait que je puisse savoir si l'élément $(this) est bien l'élément cliqué, mais comment ? En comparant avec la position du pointeur ? Pas très propre à mon goût et fastidieux...
Voilà j'espère avoir été assez clair pour que quelqu'un puisse m'orienter vers une solution efficace.
Dans l'attente, merci d'avance !
Philippe
Partager