J'ai écrit un menu déroulant avec la structure suivante. Il est censé se dérouler en cliquant sur, et fermer sur le clic.Existe-t-il un moyen de simplifier cette jquery?
Voici le HTML
<ul id="nav" class="nav">
<li>
<a id="menu1" class="menu">MENU 1</a> <!-- top menu -->
<div id="submenu1" class="submenu"> <!-- hidden by default -->
<a href="#">SUBMENU ITEM 1</a> <!-- submenu item -->
<a href="#">SUBMENU ITEM 2</a>
</div>
</li>
<li>
<a id="menu2" class="menu">MENU 2</a>
<div id="submenu2" class="submenu">
<a href="#">SUBMENU ITEM 1</a>
<a href="#">SUBMENU ITEM 2</a>
<a href="#">SUBMENU ITEM 2</a>
</div>
</li>
</ul>
Et c'est le JavaScript (en utilisant jQuery)
$("#menu1").click(function() {
$("div.submenu").hide(); // hide all menus
$("#submenu1").toggle(); // open this menu
});
$("#menu2").click(function() {
$("div.submenu").hide(); // hide all menus
$("#submenu2").toggle(); // open this menu
});
$("#menu3").click(function() {
$("div.submenu").hide(); // hide all menus
$("#submenu3").toggle(); // open this menu
});
$("#menu4").click(function() {
$("div.submenu").hide(); // hide all menus
$("#submenu4").toggle(); // open this menu
});
$(document).bind('click', function(e) {
var $clicked = $(e.target);
if (! $clicked.parents().hasClass("nav"))
$("div.submenu").hide();
});
Il y a beaucoup de répétitions dans la première partie de la JS, est-il un moyen de faire ce plus court, plus agréable, mieux?
bascule ne fonctionnera pas si vous cachez tous les menus à chaque fois. Son code était défectueux pour commencer. –
@dcneiner: De quoi parlez-vous? Les menus sont cachés avant que le menu actuel ne soit basculé, donc cela fonctionne très bien. – Guffa
Fonctionne parfaitement :) Merci! – azolotov