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

JavaScript Discussion :

Hide/show élément à partir d'un menu


Sujet :

JavaScript

  1. #1
    Membre du Club
    Homme Profil pro
    Intérimaire
    Inscrit en
    Mai 2017
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Intérimaire

    Informations forums :
    Inscription : Mai 2017
    Messages : 91
    Points : 60
    Points
    60
    Par défaut Hide/show élément à partir d'un menu
    Bonjour à tous,

    Je suis en train de préparer une application django a des fins personnels, et je suis en train d'élaborer ma page de base.

    Du coup j'ai trouvé un dropdown menu qui me convient :
    Code html : 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
    <!DOCTYPE html>
    <html>
    <head>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
    <body>
    <div class="navbar">
      <a href="#home">Home</a>
      <a href="#news">News</a>
      <div class="dropdown">
        <button class="dropbtn">Dropdown 
          <i class="fa fa-caret-down"></i>
        </button>
        <div class="dropdown-content">
          <a href="#Toto" onclick="DisplayContent(this)">Link 1</a>
          <a href="#Toto2" onclick="DisplayContent(this)">Link 2</a>
          <a href="#">Link 3</a>
        </div>
      </div> 
    </div>
    <div id="content">
      <div id="Toto">
        <p>
          Kikou c la div toto
        </p>
      </div>
      <div id="Toto2">
        <p>
          Kikou c la div toto2
        </p>
      </div>
    </div>
    </body>
    </html>
    Du coup j'essaye de faire en sorte que lorsque je clique sur Link1 çà n'affiche que la div avec l'id "Toto".

    Pour cela j'ai mis en place :
    ce css (en plus du css pour le menu):
    Code CSS : 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
    61
    62
    63
    64
    65
    66
    67
    body {
      font-family: Arial, Helvetica, sans-serif;
    }
     
    .navbar {
      overflow: hidden;
      background-color: #333;
    }
     
    .navbar a {
      float: left;
      font-size: 16px;
      color: white;
      text-align: center;
      padding: 14px 16px;
      text-decoration: none;
    }
     
    .dropdown {
      float: left;
      overflow: hidden;
    }
     
    .dropdown .dropbtn {
      font-size: 16px;  
      border: none;
      outline: none;
      color: white;
      padding: 14px 16px;
      background-color: inherit;
      font-family: inherit;
      margin: 0;
    }
     
    .navbar a:hover, .dropdown:hover .dropbtn {
      background-color: red;
    }
     
    .dropdown-content {
      display: none;
      position: absolute;
      background-color: #f9f9f9;
      min-width: 160px;
      box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
      z-index: 1;
    }
     
    .dropdown-content a {
      float: none;
      color: black;
      padding: 12px 16px;
      text-decoration: none;
      display: block;
      text-align: left;
    }
     
    .dropdown-content a:hover {
      background-color: #ddd;
    }
     
    .dropdown:hover .dropdown-content {
      display: block;
    }
     
    #content div{
      display: none;
    }

    et j'ai ajouté ce code javascript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <script>
    function DisplayContent(e){
    	let id = e.getAttribute('href').replace('#','')
     
      if (document.getElementById(id).style.display == "none"){
      	document.getElementById(id).style.display = "block";
      }else{
      	document.getElementById(id).style.display = "none";
      }
    }
    </script>
    Çà fonctionne presque bien.. le souci : quand je clique sur Link2 puis sur Link1 j'ai la div Toto2 qui reste affichée ...

    Auriez quelques idées pour éviter cela ?

    En vous remerciant d'avance.
    Cordialement.

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 075
    Points : 44 657
    Points
    44 657
    Par défaut
    Bonjour,
    je suis surpris que tu n’ai rien trouvé sur le forum, c'est un « classique » !

    Une façon lisible de faire :
    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
    // récup. éléments à afficher/masquer
    const allDiv = document.querySelectorAll("#content [id]");
     
    function DisplayContent(e) {
      // récup. élement à afficher
      const id = e.getAttribute('href').replace('#', '')
      const elem = document.getElementById(id);
     
      // affichage/masquage suivant le cas
      allDiv.forEach((el) => {
        if (el !== elem) {
          el.style.display = "none";
        }
        else {
          el.style.display = "block";
        }
      })
    }

Discussions similaires

  1. [WD17] Champs hide / show barre de menu
    Par droliprane dans le forum WinDev
    Réponses: 10
    Dernier message: 20/05/2014, 18h05
  2. [C#]statusbar (hide/show)
    Par lalilo dans le forum Windows Forms
    Réponses: 4
    Dernier message: 28/01/2006, 18h17
  3. Réponses: 1
    Dernier message: 01/11/2005, 03h24
  4. [mise à jour d'une iframe à partir d'un menu déroulant]
    Par Lady_jade dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/10/2005, 11h50
  5. Startx lancé à partir d'un menu
    Par radium dans le forum Applications et environnements graphiques
    Réponses: 5
    Dernier message: 15/07/2005, 08h43

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