Jquery: Afficher / masquer le menu avec un seul bouton

J’essaie de créer un bouton qui appelle un menu. Une fois le menu appelé, cliquez sur le bouton pour fermer le menu.

Certaines classes doivent également être ajoutées au menu / bouton pour faciliter le style.

Comment puis-je faire ceci? (J’utilise jQuery 1.8.3.)

Ceci est mon code:

$(function() { "use ssortingct"; $(document).on('click', '.anchor', function() { $('.ui-tapmenu').removeClass("animated bounceInDown"); $('.ui-tapmenu').hide(); $('.overlay').hide(); var menuId = $(this).data('menu'); var menuName = '.' + menuId; $(".loading").delay(1000).show(0); $(menuName).addClass("animated bounceInDown"); $(menuName).show(); $(this).addClass('close jq-close'); }); $('body').on('click', '.close', function() { $(this).addClass('anchor'); $(this).removeClass('close'); $('.ui-tapmenu').removeClass("animated bounceInDown"); $('.ui-tapmenu').hide(); $('.overlay').hide(); $('.anchor.jq-close').removeClass('close'); }); }); 

JS Fiddle: http://jsfiddle.net/big_smile/d4ajx/

Problème: cela fonctionne, mais lorsque le menu est fermé, le code ouvert réapparaît, de sorte que le menu rest ouvert en permanence. Je ne sais pas pourquoi cela se produit, car lorsque le “code ouvert” est exécuté, il ajoute une classe au déclencheur. Le “code de fermeture” ne fonctionne que sur cette classe, le “code ouvert” ne doit donc plus être exécuté.

Voici une autre version:

 $(function() { "use ssortingct"; $(document).on('click', '.anchor', function() { $('.ui-tapmenu').toggleClass("animated bounceInDown"); $('.ui-tapmenu').toggle(); $('.overlay').toggle(); var menuId = $(this).data('menu'); var menuName = '.' + menuId; $(".loading").delay(1000).toggle(0); $(menuName).toggleClass("animated bounceInDown"); $(menuName).toggle(); $(this).toggleClass('close jq-close'); }); }); 

JsFiddle: http://jsfiddle.net/big_smile/G48bK/

Problème: Cette bascule utilise. Le menu est initialement masqué avec CSS. Toggle définit le menu sur “display: none” et ne le configure jamais sur “display: block”.

Lorsque vous cliquez sur un élément, l’événement click est déclenché et bouillonne jusqu’à tous les éléments qui le contiennent. Le corps et le document recevront cet événement.

Pour corriger votre code, vous devez écouter à partir du même endroit.

Il suffit de changer $(document) en $('body') .

JSFiddle: http://jsfiddle.net/d4ajx/1/

Voir ce diagramme pour plus d’informations.