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 :

Afficher masquer alternativement des divs selon leur id


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 10
    Points : 11
    Points
    11
    Par défaut Afficher masquer alternativement des divs selon leur id
    J'ai 11 <div> sur une page. A la base elles sont tous cachées. Chacune d'elle possède un bouton nommé: En savoir plus?. Lors du click sur le bouton, la <div> concerné apparait et le bouton change de nom pour: Fermé fenêtre.

    Mes <div> sont aussi programme pour qu'il y en est seulement 1 d'ouverte a la fois. Donc si la <div1> est ouverte, lors du click sur la <div2>, la <div1> se ferme.

    Le probleme arrive lorsque je click sur le bouton d'une des <div>, la <div> ouvre et le bouton change de nom comme prévu. Mais lorsque j'ouvre une 2e <div> la première se ferme MAIS garde le nom: fermé fenêtre.

    Je veux que lorsqu'une <div> est fermé, sont bouton affilié sois toujours: En savoir plus?

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    function switchDiv(n) {
       var id;
       var hide = 0;
       switch(n) {
          case 1 : id = "div1"; break;
          case 2 : id = "div2"; break;
          case 3 : id = "div3"; break;
          case 4 : id = "div4"; break;
          case 5 : id = "div5"; break;
          case 6 : id = "div6"; break;
          case 7 : id = "div7"; break;
          case 8 : id = "div8"; break;
          case 9 : id = "div9"; break;
          case 10 : id = "div10"; break;
          case 11 : id = "div11"; break;
          }
       if ( document.getElementById(id).style.display == "block" ) hide = 1;
       document.getElementById('div1').style.display = "none";
       document.getElementById('div2').style.display = "none";
       document.getElementById('div3').style.display = "none";
       document.getElementById('div4').style.display = "none";
       document.getElementById('div5').style.display = "none";
       document.getElementById('div6').style.display = "none";
       document.getElementById('div7').style.display = "none";
       document.getElementById('div8').style.display = "none";
       document.getElementById('div9').style.display = "none";
       document.getElementById('div10').style.display = "none";
       document.getElementById('div11').style.display = "none";
       if ( hide != 1 ) document.getElementById(id).style.display = "block";
       }
     
    oldTextAry = new Array();
     
    function changeText (fieldObj, newTexStr) {
    if (newTexStr == fieldObj.innerHTML) {
    fieldObj.innerHTML = oldTextAry[fieldObj.id];
    } else {
    oldTextAry[fieldObj.id] = fieldObj.innerHTML;
    fieldObj.innerHTML = newTexStr;
    }
    }
    html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <p class="choix">Carrière</p>
    	<div id="div1" style="display: none;">
    	</div>
    	<p class="savoir_plus"><a id="ferme_fenetre" href="#div1" onclick="switchDiv(1);changeText(this,'« Réduire fenêtre'); "><i>En savoir plus?</i></a></p>
    Merci de votre aide ...

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    suggestion:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     document.getElementById('div'+n).style.display = "none";
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    Malheureusement ca ne marche pas

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    Malheureusement tu n'as pas compris la piste et tu n'as pas su l'implémenter ..

    http://jsfiddle.net/ywZTh/
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    Marrant comme exercice !
    http://jsfiddle.net/hBmaF/

    Comprends, analyse, pose des questions, le but c'est de comprendre ce qui se passe

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Points : 628
    Points
    628
    Par défaut
    Mes <div> sont aussi programme pour qu'il y en est seulement 1 d'ouverte a la fois. Donc si la <div1> est ouverte, lors du click sur la <div2>, la <div1> se ferme.

    Le probleme arrive lorsque je click sur le bouton d'une des <div>, la <div> ouvre et le bouton change de nom comme prévu. Mais lorsque j'ouvre une 2e <div> la première se ferme MAIS garde le nom: fermé fenêtre.
    Essaie de voir si mon script javascript peut t'aider à actionner seulement un div tout en cachant les autres.

    Je l'utilise pour faire apparaitre un panel parmi d'autres, en cliquant l'onglet que possède chaque panel, donc c'est un peu le même principe en fait.
    Je sais plus où est mon lien essaie de le trouver dans "contributions" du forum javascript, ça parle d'onglets.

    Pas mal les liens de Kaamo et spacefrog !!! Regarde-les !
    Cliquez ici et reprenez le pouvoir !
    A bas IE !, Google, et le pistage du net, testons DuckDuckGo.com
    Lords Of The Realm II Download : Lords of the realm 2
    Infos en anglais :Ici

  7. #7
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    A mort les ID
    http://jsfiddle.net/hBmaF/1/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $('.bouton_tohide').on('click', function(){
        $('.bouton_tohide').val('En savoir plus ?').filter(this).val('Fermer');
        $('.tohide').slideUp(300).filter($(this).prev('.tohide')).slideDown(300);
    });
    One Web to rule them all

  8. #8
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Points : 628
    Points
    628
    Par défaut
    Oui bon heu...je suis d'accord



    Faut que je me mette à cette méthode moi aussi, c'est nouveau pour moi ce $ là

    Tu l'insère comment ce style d'écriture sur la page ? dans le body ou dans un JS que tu appelle avec le onload() ou dans une fonction par evènnement ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $('.bouton_tohide').on('click', function(){
        $('.bouton_tohide').val('En savoir plus ?').filter(this).val('Fermer');
        $('.tohide').slideUp(300).filter($(this).prev('.tohide')).slideDown(300);
    });
    Cliquez ici et reprenez le pouvoir !
    A bas IE !, Google, et le pistage du net, testons DuckDuckGo.com
    Lords Of The Realm II Download : Lords of the realm 2
    Infos en anglais :Ici

  9. #9
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Le $ c'est jQuery. Généralement on lance le code via $(document).ready() :
    http://api.jquery.com/ready/
    One Web to rule them all

  10. #10
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Points : 628
    Points
    628
    Par défaut
    Ah merci, je m'étais dis qu'il fallait que je me lance un jour dans JQuery, j'ai jamais osé, bon bein je vais le faire

    Avant que tu postes, j'ai testé le code dans un onload() et ça m'a affiché erreur :
    Horodatage : 23/03/2013 13:55:30
    Erreur : ReferenceError: $ is not defined
    Ligne : 4
    Mais comme je dois le télécharger, est-ce que les gens qui auront mes scripts devront le faire aussi ?
    Cliquez ici et reprenez le pouvoir !
    A bas IE !, Google, et le pistage du net, testons DuckDuckGo.com
    Lords Of The Realm II Download : Lords of the realm 2
    Infos en anglais :Ici

  11. #11
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    Niquel Sylvain ! Je ne savais pas qu'on pouvait utiliser jQuery
    dragonno : Il suffit d'inclure la dernière version de jquery

  12. #12
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Points : 628
    Points
    628
    Par défaut
    Merci, mais par inclure tu veux dire "inclusion de fichier" comme en PHP ?

    Mais les utilisateurs n'ont rien besoin de télécharger ? Je vais me renseigner sur Jquery je l'ai téléchargé là

    J'ai vu des tutos tout à l'heure, je vais en prendre
    Cliquez ici et reprenez le pouvoir !
    A bas IE !, Google, et le pistage du net, testons DuckDuckGo.com
    Lords Of The Realm II Download : Lords of the realm 2
    Infos en anglais :Ici

  13. #13
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Non dragonno jQuery est une librairie JS, c'est à dire des fichiers de code Javascript comme ceux que toi tu peux écrire. Il suffit d'importer la librairie via une balise script et le navigateur de tes clients se chargera de les compiler et interpréter.

    @Kaamo: je ne sais pas si l'auteur utilise jQuery mais dans le doute, je choisis la solution de facilité
    One Web to rule them all

  14. #14
    Membre du Club
    Profil pro
    Ingénieur calcul
    Inscrit en
    Février 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur calcul

    Informations forums :
    Inscription : Février 2011
    Messages : 47
    Points : 40
    Points
    40
    Par défaut
    J'avais fais quelque chose comme ça mais en utilisant element.style.visibility="hidden" ou element.style.visibility="visible", mais je pense que ça doit marcher aussi avec display="none".

    Disons que tes div aient de ID comme DIV0, DIV1, DIV2 ect.. et tes boutons B0, B1, B2 ect...

    La fonction serait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function afficher(val) {
         for (var i=0;i<nombreDeDIV;i++) {
              document.getElementById("DIV"+i).style.visibility="hidden";
              document.getElementById("B"+i).innerHTML="En savoir plus ??";
         }
         document.getElementById("DIV"+val).style.visibility="visible";
         document.getElementById("B"+val).innerHTML="FERMER FENETRE";
    }
    et tu l'associe à chacun des boutons:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for (var i=0;i<nombreDeDIV;i++) {
         document.getElementById("B"+i).value=i;
         document.getElementById("B"+i).onclick=function() {
                                    if (document.getElementById("DIV"+this.value).style.visibility=="visible") {
                                                                                                  document.getElementById("DIV"+this.value).style.visibility="hidden";
                                                                                                  this.innerHTML="En Savoir PLus ??";
                                                                                                }
                                    else {
                                            afficher(this.value);
                                           }
                                    }
    }

  15. #15
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Points : 628
    Points
    628
    Par défaut
    OK Merci SylvainPV
    Cliquez ici et reprenez le pouvoir !
    A bas IE !, Google, et le pistage du net, testons DuckDuckGo.com
    Lords Of The Realm II Download : Lords of the realm 2
    Infos en anglais :Ici

  16. #16
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    Sans id => avec index ... (et Jquery)

    http://jsfiddle.net/ywZTh/1/
    ou
    http://jsfiddle.net/ywZTh/2/
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  17. #17
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 10
    Points : 11
    Points
    11
    Par défaut resolu!
    probleme resolu !!

    java script:
    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
    		<script type="text/javascript">
    (
      function( )
      {
          var links = document.getElementsByTagName("a");
          for ( var i = 0; i < links.length; ++i )
          {
              var link = links[i];
              if ( link.id.substring(0,4) === "_div" )
              {
                  link.onclick = changeDiv;
              }
          }
          var priorLink = null;
          function changeDiv( )
          {
              if ( priorLink == this )
              {
                  // if same link clicked on again, just turn it back off
                  this.innerHTML = "En savoir plus?";
                  document.getElementById(this.id.substring(1)).style.display = "none";
                  priorLink = null;
                  return;
              }
              // in all other cases, turn off all divs...
              for ( var i = 0; i < links.length; ++i )
              {
                  var link = links[i];
                  if ( link.id.substring(0,4) === "_div" )
                  {
                      var div = document.getElementById(link.id.substring(1));
                      div.style.display = ( link == this ) ? "block" : "none";
                      link.innerHTML = "En savoir plus?";
                  }
              }
              this.innerHTML = "« Réduire fenêtre";
              priorLink = this;
          }
      }
    )();
    </script>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lire des fichiers selon leur nom
    Par guiguilelotois dans le forum LabVIEW
    Réponses: 4
    Dernier message: 18/05/2009, 13h55
  2. [Flash MX] Supprimer des carte selon leurs valeurs
    Par Lenalyon dans le forum Flash
    Réponses: 1
    Dernier message: 01/09/2007, 12h18
  3. afficher le nom des attributs et leur contenu
    Par PoichOU dans le forum Général Java
    Réponses: 4
    Dernier message: 28/06/2007, 21h30
  4. taille des textbox selon leur contenu
    Par christi dans le forum ASP.NET
    Réponses: 4
    Dernier message: 08/02/2007, 16h20
  5. Réponses: 2
    Dernier message: 04/05/2006, 19h53

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