IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Sauvergarde etat menu en css/javascript (deroule/non deroule) d'une page à l'autre


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 61
    Points : 44
    Points
    44
    Par défaut Sauvergarde etat menu en css/javascript (deroule/non deroule) d'une page à l'autre
    Bonjour(soir),

    Tâchons d'être clair ...

    Voilà, j'utilise un menu vertical dans mon site asp.net, celui fonctionne avec un mélange de
    javascript/css et est incorporé au sein d'une master-page.
    Le but du javascript est de dérouler/enrouler verticalement les menus, et cela focntionne.
    Par défaut à l'ouverture d'une page, tous les menus sont déroulés.
    Malheuresement, en passant d'une page à l'autre, tous les menus reviennent à l'état initial, c'est à dire tous déroulés, malgré que la master page soit la même...

    Des avis pour modifier ce fontionnement?

    Cordialement,

    Bonne soirée | journée !

    mon code javascript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    <script type="text/javascript">
            //window.onload=init; // décommenter pour enrouler tous les menus par défaut
            function montre(id) {
     
                var d = document.getElementById(id);
                if (d.style.display=='none')
                    {d.style.display='block';}
                else
                    {d.style.display='none';}
            }
            function init(id){
                for (var i = 1; i<=10; i++)
                {
                       if (document.getElementById('smenu'+i))
                       {document.getElementById('smenu'+i).style.display='none';}
                 }
            }
        </script>

  2. #2
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    hmmm...

    j'avais fait un truc comme ca en ajoutant un controle hiddenfield a ma page aspx, que je mettais a jour en javascript quand je deroulais/enroulais le menu...

    comme c'est un controle serveur, son etat est stocke dans le viewstate, et dans la fonction init, tu ajoutes qq chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var estVisible = document.getElementById(<% = monChampCache.ClientID %>).value;
     
    document.getElementById('smenu'+i).style.display=estVisible
    et tu changes le contenu de estVisible de none a block dans ta fonction montre...

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 61
    Points : 44
    Points
    44
    Par défaut
    Merci pour cette réponse, je suis débutant, je connaissais pas les hiddenfield...
    Par contre, si j'ai bien compris, cela m'oblige à créer un hiddenfield par sous-menu ? A moins qu'il y ai une astuce ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 61
    Points : 44
    Points
    44
    Par défaut
    Il semble que la fonction init de ma masterpage (window.onload=init ne soit pas appelé à chaque chargement de page.
    Enfin c'est ce que je peux constater avec firebug, outil sur lequel je débute cependant..
    Du coup je ne peux pas appliquer cette méthode.

    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    <script type="text/javascript">
            window.onload=init;
            function montre(id) 
            {
    	        var d = document.getElementById(id);
    	        if (d.style.display=='none') 
    		    {
    		        d.style.display='block';
    		        document.getElementById('<%=MonChampCache1.ClientID %>').value="block";    
    		    }
    	        else
    		    {
    		        d.style.display='none';
    		        document.getElementById('<%=MonChampCache1.ClientID %>').value="none";    
    		    }
            }
            function init(id)
            {
     
    	        for (var i = 1; i<=10; i++) 
    	        {
    	        if (document.getElementById('smenu'+i))
    	        {
                      var estVisible=document.getElementById('<%=MonChampCache1.ClientID %>').value;
                      if (estVisible=='none')
                      {
                        document.getElementById('smenu'+i).style.display='none'; 
                      }
                      else
                      {
                        document.getElementById('smenu'+i).style.display='block'; 
                      }
                }
                }
     
    		}
    </script>

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Points : 581
    Points
    581
    Par défaut
    moi perso j'ai fais aussi la même chose mais je stock les menus ouvert dans un cookie. C'est plutot cool comme ca si l'utilisateur a sa session qui expire quand il revient les menus sont comme avant.

    après c'est suivant les gouts de chacun.
    L'Homme est doté de 2 yeux et de 2 oreilles pour voir et entendre deux fois plus qu'il ne parle

    Je ne réponds pas au questions par mp. Merci

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 61
    Points : 44
    Points
    44
    Par défaut
    Je suis justement en recherche de solutions..car pour l'instant avec les hiddenfield ça ne fonctionne pas..
    Les cookies me paraissent être une bonne option..si tu peux m'aiguiller un peu
    sur cette solution .. ? (je suis débutant)

    En tous cas merci pour ta réponse.

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Points : 581
    Points
    581
    Par défaut
    Par contre moi c'était prévu qu'il y est 1 seul sous niveau. C'est donc plus ou moins spécialisé.
    J'ai mis en place tous un mécanisme en javascript.

    pour résumer:
    c'est une imbrication de UL et Li . J'utilise des repeaters pour cela en l'occurence deux dans mon cas. En gros j'ai une premiere liste dans laquelle chaque element contient une autre liste.
    <UL> Conteneur principal du menu
    -<Li> Premier element
    --<UL> Conteneur de sous menus (Visible ici)
    ---<LI/> 1er sous menu
    ---<LI/> 2 eme sous menus
    --</UL>
    -</LI>
    -<LI/>Deuxième élément (conteneur caché)
    -<LI/>troisième élément (conteneur caché)
    </UL>

    Coté javascript j'ai un tableau(Array) qui contient tt les Id de mes listes (Ul conteneur de sous menus)qui sont ouverts.

    Forcement la premiere fois il est vide

    lors du click sur un élément j'affiche le conteneur de sous menu et enregistre son ID dans le tableaux et vice versa si c'est pour cacher

    Ensuite je récupére tout mon tableaux et l'enregistre dans un cookie.

    Et voila le tour est joué quand l'utilisateur change de page je récupère le cookie remplis mon tableau et pour chaque item je fais comme si l'utilisateur cliquais sur l'element.

    En gros
    1- Création tableau
    2- récup du cookie, si present -> 3

    3- recuperation des id, pour chaque ID appele de la fonction click() (qui est aussi appelle lors d'un click)

    4- si appel de la fonction click(en evenement ou à la "main") affichage du sous elements ou pas (suivant si il est dispaly block ou pas). Enregistrement de l'id dans le tableau ou effacement.

    4.1- ensuite parcours de tout le tableau pour enregistrer les elements ouvert dans un cookie


    Si tu veux voila les fonctions que j'aui utilisé pour les cookies. c'est des fonctions que j'ai recup du net et que j'ai très légèrement adaptés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    function getCookieVal (offset) 
       {
       var endstr = document.cookie.indexOf (";", offset);
       if (endstr == -1)
          endstr = document.cookie.length;
       return unescape(document.cookie.substring(offset, endstr));
       }
     
    function GetCookie (name) 
       {
       var arg = name + "=";
       var alen = arg.length;
       var clen = document.cookie.length;
       var i = 0;
       while (i < clen) 
          {
          var j = i + alen;
          if (document.cookie.substring(i, j) == arg)
             return getCookieVal (j);
          i = document.cookie.indexOf(" ", i) + 1;
          if (i == 0) break; 
          }
       return null;
       }
     
    function SetCookie () 
       {
       var argv = SetCookie.arguments;
       var argc = SetCookie.arguments.length;
       var cookieName = (argc > 0) ? argv[0] : null;
       var value = (argc > 1) ? argv[1] : null;
       var expires = (argc > 2) ? argv[2] : null;
       var path = (argc > 3) ? argv[3] : null;
       var domain = (argc > 4) ? argv[4] : null;
       var secure = (argc > 5) ? argv[5] : false;
       document.cookie = cookieName + "=" + escape (value) +
            ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
            ((path == null) ? "" : ("; path=" + path)) +
            ((domain == null) ? "" : ("; domain=" + domain)) +
            ((secure == true) ? "; secure" : "");
       }
     
    function DeleteCookie (value) 
       {
       var exp = new Date();
       exp.setTime (exp.getTime() - 1000000000);  // This cookie is history (changed -1 to make it previous time)
       var cval = GetCookie (value);
       document.cookie =value + "=" + cval + "; expires=" + exp.toGMTString();
       }
     
       function SetTheCookie(valeur)
       {
     
          var expdate = new Date (); 
          expdate.setTime(expdate.getTime() + (24 * 60 * 60 * 1000)); 
          SetCookie('menu', valeur, expdate, '/');  
          //alert('Cookie has been set to ' + valeur + '.');
          return false;
       }
    C'est peut être un peu compliqué je te l'accorde.
    Si tu veux tt le code javascript brut de fonderie demande le moi mais je sais pas si ca t'avancera.
    L'Homme est doté de 2 yeux et de 2 oreilles pour voir et entendre deux fois plus qu'il ne parle

    Je ne réponds pas au questions par mp. Merci

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 61
    Points : 44
    Points
    44
    Par défaut
    Merci tardif mais merci ;-) ..

    Je vais donc tâcher de faire ça avec les cookies.

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    Excusez mon intrusion dans cette discussion.
    J'ai le même problème que Leiwulang. Sauf que mon niveau est tel que je n'ai rien compris à la solution.
    Voilà: j'ai téléchargé le Menu Vertical Déroulant 2 de la page http://css.developpez.com/galerie/?p...-verticaux#MV1

    Or à chaque changement de page, il se remet à son état initial, c'est à dire ne montrant que les menus principaux.
    J'aimerais qu'il garde la position ouverte sur le sous-menu qu'il vient de quitter.
    Mon souhait est qu'il reste compatible avec tous les navigateurs.
    Vous avez compris que je suis apprenti webmestre. Si donc vous avez une solution toute prête à intégrer dans les fichiers, je suis preneur.
    merci à Vous.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 61
    Points : 44
    Points
    44
    Par défaut
    Perso, je n'ai pas mis en oeuvre ça pour l'instant, donc je ne peux pas t'aider
    facilement.
    La solution par cookies me plait mais il faudrait que j'y consacre un peu de temps.
    La solution avec les Hiddenfield parait plus simple mais ne fonctionne pas de mon côté, le hiddenfield sur ma masterpage ne conservant pas sa valeur quand je change de page...

    Si j'ai des nouvelles, je mettrai à jour la discussion..

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci Leiwulanq,
    me concernant, je ne sais même pas ce que que c'est qu'un hiddenfield.
    Tu vois mon niveau ...
    Et si je suis intervenu un peu sans-gêne dans ta discussion, c'est que je ne savais pas dans quelle rubrique poser ma question.
    Mais une âme charitable arrivera sans doute à me dépanner.

Discussions similaires

  1. variables de session non conservées d'une page à l'autre
    Par titemimine dans le forum Langage
    Réponses: 10
    Dernier message: 04/06/2010, 16h29
  2. Expanding vertical menu en CSS/javascript
    Par rems033 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 07/11/2008, 11h34
  3. Expanding vertical menu en CSS/javascript
    Par rems033 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 07/11/2008, 09h31
  4. Menu en CSS, Javascript ou les 2 ?
    Par senacle dans le forum Mise en page CSS
    Réponses: 16
    Dernier message: 14/08/2008, 16h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo