Sous menu disparait jquery

Fermé
beatrice - 4 janv. 2019 à 01:19
 beatrice - 22 janv. 2019 à 14:56
bonjour,

je vous mets le code html qui n'a pas important mais c'est juste pour comprendre mieu le code jquery ;)

	  <!--début des navigations par onglet-->
	  <section id="global-mini-chat">

	  <!--début des menus principaux-->
	  <nav><ul class="menu">
	  <li class="actif">Les salons</li>
	  <li>#1salon</li>
	  <li>pseudo</li>
	  </ul></nav>
	  <!--fin des menus principaux-->

	  <!--début du contenu-->
	  <div class="contenu6">

	  <!--début du les salons-->
	  <div class="item level1">
	  <!--début des sous menus les salons-->
	  <nav><ul class="sous-menu not-border">
	  <li class="actif">Salons Officiels</li>
	  <li>Salons Perso</li>
	  </ul></nav>
	  <!--fin des sous menus les salons-->


	  <nav><li class="creer-salon"><button class="icon-button-ajouter" type="submit">créer un salon</button></li></nav>





	  <!--début du contenu-->
	  <div class="contenu5">

	  <!--début salons officiels-->
	  <div class="item level2">conversation</div>
	  <!--fin salons officiels-->
	  <!--début salons Perso-->
	  <div class="item level2">conversation</div>
	  <!--fin salons perso-->

	  </div>
	  <!--fin du contenu-->

	  </div>
	  <!--fin du Les salons-->

	  <!--début #1salon-->
	  <div class="item level1">
		  
		  
		  
		  
			  <!--début des sous nouvelle proposition-->
	  <nav><ul class="sous-menu">
	  <li class="actif">homme(s)</li>
	  <li>femme(s)</li>
	  </ul></nav>
	  <!--fin des sous nouvelle proposition-->
	  <!--début du contenu-->
	  <div class="contenu">
	  <!--début Tout les nouvelle proposition hommes-->
	  <div class="item level2">blablablz</div>
	  <!--fin Tout les nouvelle proposition hommes-->

	  <!--début tout les nouvelle proposition femmes-->
	  <div class="item level2">blablablz</div>
	  <!--fin tout les nouvelle proposition femmes-->
	  </div>
	  <!--fin du contenu-->
  
		  
		  
		  
		  
		  
		  
		  
		  
		  </div>
	  <!--fin #1salon-->
	  <!--début pseudo-->
 <div class="item level1">
		  
		  
		  
		  
			  <!--début des sous nouvelle proposition-->
	  <nav><ul class="sous-menu">
	  <li class="actif">homme(s)</li>
	  <li>femme(s)</li>
	  </ul></nav>
	  <!--fin des sous nouvelle proposition-->
	  <!--début du contenu-->
	  <div class="contenu">
	  <!--début Tout les nouvelle proposition hommes-->
	  <div class="item level2">blablablz</div>
	  <!--fin Tout les nouvelle proposition hommes-->

	  <!--début tout les nouvelle proposition femmes-->
	  <div class="item level2">blablablz</div>
	  <!--fin tout les nouvelle proposition femmes-->
	  </div>
	  <!--fin du contenu-->
  
		  
		  
		  
		  
		  
		  
		  
		  
		  </div>	  <!--fin pseudo-->

	  </div>
	  <!--fin du contenu-->

	  </section>
	  <!--fin des navigations par onglet-->


j'ai des menu et sous menu sous forme onglet

      var nav = function (parent, level){
            $(parent).css('display', 'flex');
            $(parent).click(function(event) {
                var actuel = event.target;
                if (!/li/i.test(actuel.nodeName) || actuel.className.indexOf('actif') > -1) {
                    return;
                }
                $(actuel).addClass('actif').siblings().removeClass('actif');
                setDisplay();
            });
            function setDisplay() {
                var modeAffichage;
                $(parent).find('li').each(function(rang) {
                    modeAffichage = $(this).hasClass('actif') ? '' : 'none';
                    $('.item.level'+level).eq(rang).css('display', modeAffichage);
                });
            }
            setDisplay();       
       };
       nav('.menu', 1);
       nav('.sous-menu', 2);


là si je vois les salons(menu) et salons officielle(sous menu) là il sont bien actif. jusqu'a la c'est bon.

ensuite
je clique sur le salon perso (sous menu).

ensuite je cliques sur l'onglet pseudo (le 3 eme menu)

là on voit bien l'onglet pseudo(menu) qui st actif avec l'onglet home (sous-menu)

jusqu'a là c'est bon

ensuite je re clique sur l'onglets les salons (menu)

là je m'apperçois que l'onglet actif c'est le salon perso car il tient en compte le dernier onglet du sous menu qu'on a cliqué

hor moi j'aimerais que c'est le 1 er onglets qui soit actif

pour celà :

j'ai rajouté

function setDisplay() {
    var modeAffichage;
    $(parent).find('li').each(function(rang) {
        if(!$(this).hasClass('actif') ){
     
        $('.item.level'+level).find('li').removeClass('actif');
    $('.item.level'+level).find('li').eq(0).addClass('actif');
     }


en final le nouveau code


      var nav = function (parent, level){
            $(parent).css('display', 'flex');
            $(parent).click(function(event) {
                var actuel = event.target;
                if (!/li/i.test(actuel.nodeName) || actuel.className.indexOf('actif') > -1) {
                    return;
                }
                $(actuel).addClass('actif').siblings().removeClass('actif');
                setDisplay();
            });
function setDisplay() {
    var modeAffichage;
    $(parent).find('li').each(function(rang) {
        if(!$(this).hasClass('actif') ){
     
        $('.item.level'+level).find('li').removeClass('actif');
    $('.item.level'+level).find('li').eq(0).addClass('actif');
     }                    modeAffichage = $(this).hasClass('actif') ? '' : 'none';
                    $('.item.level'+level).eq(rang).css('display', modeAffichage);
                });
            }
            setDisplay();       
       };
       nav('.menu', 1);
       nav('.sous-menu', 2);


là, il prend bien compte le 1 er onglet qui est actif là tout est bon

mais le souci , je n'arrive pas à trouvé

quand je clique sur le saon ou pseudo, du menu .

je m’aperçois que les sous menu homme et femme disparaît ,
come , je doit dire sous menu afin qu'il apparaît à nouveau

merci
A voir également:

3 réponses

bonjour, je savais que vous n'allez pas répondre car vous n'avez surement pas compris ;)

en espérant avec le lien ca peut vous aidé.

j'ai ce code
https://codepen.io/anon/pen/MZVjae

si vous cliquez sur salon perso(la il sera actif) ensuite clique pseudo (l'onglet home est bien actif) ensuite vous re cliquez sur les salons (là vous verrez salon perso(actif) mais moi je veux que ca revient sur le 1 er onglet (actif)

donc j'ai rajouter


function setDisplay() {
    var modeAffichage;
    $(parent).find('li').each(function(rang) {
        if(!$(this).hasClass('actif') ){
     
        $('.item.level'+level).find('li').removeClass('actif');
    $('.item.level'+level).find('li').eq(0).addClass('actif');
     }


voilà ceux que ca fait

https://codepen.io/anon/pen/NeYRpP

là si vous cliquez sur salon perso, ensuite vous cliquer sur le pseudo (vous verrez l'onglet homme en gris car il n'est pas actif (coment on peut lui dire d'afficher )

si vous cliquez sur les salons là vous verrez les salons officielle actif


donc coment je doit faire pour que tout les cadres saffiche

merci
0
bonjour béatrice,

met ce code,

       var nav = function (parent, level){
            $(parent).css('display', 'flex');
            $(parent).click(function(event) {
                var actuel = event.target;
                if (!/li/i.test(actuel.nodeName) || actuel.className.indexOf('actif') > -1) {
                    return;
                }
                $(actuel).addClass('actif').siblings().removeClass('actif');
                setDisplay();
            });
            function setDisplay() {
                var modeAffichage;
                $(parent).find('li').each(function(rang) {
                    modeAffichage = $(this).hasClass('actif') ? '' : 'none';
                    $('.item.level'+level).eq(rang).css('display', modeAffichage);
                });
            }
            setDisplay();       
       };
       nav('.menu', 1);
       nav('.sous-menu', 2);
0
Merci, franck

si j'ouvre la page on aura

les salons (actif) 1 salon (inactif) pseudo(inactif)

et dans chaque onglet du menu il y a u n sous menu avec 2 onglets

menu du onglet : les salons (actif)
sous menu : salons officielle(actif)
sous menu : salon perso (inactif)

si je clique sur salon perso ; on aura

menu du onglet : les salons (actif)
sous menu : salons officielle(inactif)
sous menu : salon perso (actif)

si après je clique sur l'onglet pseudo et je clique sur sous menu femme

menu du onglet : pseudo (actif)
sous menu : homme (inactif)
sous menu : femme (actif)

ensuite je veux retourné dans l'onglet les salons

là j'aurais

menu du onglet : les salons (actif)
sous menu : salons officielle(inactif)
sous menu : salon perso (actif)


là le souci , il ne veut pas revenir sur le 1 er onglets, car il prend en charge le dernier onglet cliqué

je veux que le premier onglet revient actif à) chaque onglet du menu


et comme je disais j'ai rajouté ce code qui permet de revenir aux 1 er onglet

function setDisplay() {
    var modeAffichage;
    $(parent).find('li').each(function(rang) {
        if(!$(this).hasClass('actif') ){
     
        $('.item.level'+level).find('li').removeClass('actif');
    $('.item.level'+level).find('li').eq(0).addClass('actif');
     }


mais, ca me fait caché le texte des sous menu

donc coment je dois faire

merci
0