Je dois appliquer un jQuery.click uniquement aux éléments de premier niveau. Comment je fais ça?Comment puis-je appliquer jQuery.click uniquement aux éléments de premier niveau?
Voici ma liste:
<ul id="adminMenu">
<li id="A">
<h3><a href="">Item 1</a></h3>
</li>
<li id="B">
<h3>Item 2</h3>
<ul style="display: block;">
<li id="a1"> Sub Item 1 </li>
<li id="a2"> Sub Item 2 </li>
<li id="a3"> Sub Item 3 </li>
</ul>
</li>
<li id="C">
<h3>Item 3</h3>
<ul style="display: none;">
<li> Sub Item 4 </li>
<li> Sub Item 5 </li>
</ul>
</li>
</ul>
Et voici le jQuery
jQuery('#adminMenu > li').click(function(){
alert('test');
});
MISE À JOUR
L'alerte devrait pas feu lorsque je clique sur un élément sous menu, uniquement lorsque Je clique sur la liste A, B ou C.
SOLUTION 1
Ce code est basé sur la suggestion de Marcels.
jQuery('#adminMenu > li > h3').click(function(e) {
var activeUL = jQuery("#adminMenu > li ul:visible");
var activeLI = jQuery("#adminMenu > li ul:visible").parent('li:first');
var clicked = jQuery(this).parent('li:first');
// Close submenu
activeUL.hide('fast');
// Open submenu
if(activeLI.attr('id') != clicked.attr('id'))
clicked.children('ul').show('fast');
});
SOLUTION 2
C'est le code de travail basé sur la suggestion de Paupières.
jQuery('#adminMenu > li').click(function(e) {
var clicked = jQuery(e.target);
// Ensure we're checking which list item is clicked,
// other children should be allowed
if(!clicked.is('li') && clicked.parents('li').length > 0) {
// :first ensures we do not select higher level list items
clicked = clicked.parents('li:first');
}
// If clicked list item is a child of another list item, we'll exit here
if(!clicked.is('#adminMenu > li')) {
return;
}
var activeUL = jQuery("#adminMenu > li ul:visible");
var activeLI = jQuery("#adminMenu > li ul:visible").parent('li:first');
// Close submenu
activeUL.hide('fast');
// Open submenu
if(activeLI.attr('id') != clicked.attr('id'))
clicked.children('ul').show('fast');
});
Merci les gars! Je n'aurais jamais réussi ça sans ton aide! :)
En ce qui concerne la mise à jour 2: oui, ce qui est la raison pour laquelle vous aurez besoin de détecter si les sous-éléments ont été cliqués. Cliquez sur les événements "bulle", ce qui signifie qu'un événement click sur un élément enfant est également un événement click sur ses éléments parents. Le moyen le plus simple d'inter-navigateur * pour arrêter ces bulles et isoler les clics sur les parents est de déterminer si un élément enfant a déclenché l'événement click et de quitter dans ce cas. Voir ma réponse mise à jour pour la mise en œuvre de cette méthode. * Note: Les navigateurs non-IE permettent de "capturer" des événements (plutôt que de "bouillonner"), mais comme cela n'est pas supporté par IE, cela ne vaut pas la peine de s'y fier. – eyelidlessness