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 :

Fonction javascript et propriété display d'une div


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 39
    Points : 33
    Points
    33
    Par défaut Fonction javascript et propriété display d'une div
    Bonjour à tous,

    J'essai de faire quelque chose de simple, mais je n'y arrive pas...

    Je souhaite, sur page web, avoir la possibilité de cacher du texte, et si l'utilisateur clique sur le lien affiché, le texte apparait. Le texte du lien doit alors changer (par exemple de "texte caché" à "texte affiché").

    Voici mon bout de code :
    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
    <html>
    	<head>
    		<script language="javascript" type="text/javascript">
    function basculer(elem){
            var action = (document.getElementById(elem).style.display == "block") ? "none" : "block";
            document.getElementById(elem).style.display = action;
    }
                    </script>
    		<script language="javascript" type="text/javascript">
    function etat(elem){
            var action = (document.getElementById(elem).style.display == "block") ? "affich&eacute;" : "cach&eacute;";
            document.write(action);
    }                               
                    </script>		
    	</head>
    	</head>
    	<body>
    		<a href = "" onclick = "basculer('identification'); return false;">Texte <script>etat('identification');</script> !!!</a>
    		<div id='identification' style = 'display:none;'>
    			Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. 
    			Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. 
    			Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. 
    			Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. 
    			Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. 
    			Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. 
    			Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. 
    		</div>
    	</body>
    </html>

    La fonction basculer() fonctionne parfaitement. Par contre, la fonction état() pas du tout...

    Si quelqu'un a une petite idée du pourquoi du comment... Ce serait super cool, car je suis débutant en javascript...


    Merci d'avance à tous !

  2. #2
    Membre averti
    Profil pro
    à la bougie alors
    Inscrit en
    Mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : Mai 2006
    Messages : 224
    Points : 362
    Points
    362
    Par défaut
    Dans la fonction 'etat()' : document.write n'est pas ce qu'il vous faut.
    Vous voulez changer le texte affiché dans l'hyperlien (la balise 'a'). Il vous faut donc, dans votre fonction 'etat()', récupérer d'une façon ou d'une autre la balise 'a' (si vous mettez un 'id', vous pourrez utiliser document.getElementById()) et trouver un moyen d'en modifier le texte affiché, peut-être avec l'attribut .textContent ?, ou en créant un noeud texte avec document.createTextNode() ?
    Des éléments de réponse se trouvent dans les specs ou docs ou tutoriaux sur DOM et HTML.
    Bonne recherche.

  3. #3
    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
    Une balise script est exécutée une seule fois. Et son emplacement dans le document n'a que peu d'importance, le script sera simplement exécuté au moment où l'interpréteur HTML arrive à son niveau.
    Voici une façon de faire:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <a href = "#identification" onclick = "basculer(this, 'identification'); return false;">Texte caché !!!</a><div id='identification' style = 'display:none;'>
        Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. 
        Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. 
        Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. 
        Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. Plein de texte &agrave; afficher. 
    </div>

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function basculer(lien, id){
        var elem = document.getElementById(id);
        if(elem.style.display == "none"){
            elem.style.display = "block";
            lien.textContent = "Texte affiché";        
        } else {
            elem.style.display = "none";
            lien.textContent = "Texte caché";
       }
    }

    J'ai aussi ajouté l'id identification comme attribut href du lien pour servir d'ancre.
    One Web to rule them all

  4. #4
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 386
    Points : 3 531
    Points
    3 531
    Billets dans le blog
    1
    Par défaut
    Version avec jQuery :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <a href="#" id="alink">Cacher</a>
     
    <div id="atext">
        <div>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Magni nam suscipit expedita maxime esse explicabo 
    velit culpa veritatis necessitatibus ut rerum quae aspernatur. Quam natus nesciunt a veniam ipsa ea!</div>
    </div>

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $("#alink").click(function(){ 
       $("#atext").toggle();
        $("#atext").is(":visible") ? $(this).html("Cacher") : $(this).html("Afficher");
        return false;
    });

    http://jsfiddle.net/2w2g6nuq/
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    je vous propose une version CSS et javascript qui devient de plus en plus abordable même si non encore complétement crossBrowser.

    Sur base du code HTML suivant, je préfère utiliser des BUTTON pour l'action plutôt que des A, j'assume et avec un peu de CSS ni vu ni connu...
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      <div>
        <button class="expand visible">le texte</button>  
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum</p>
      </div>  
      <div>
        <button class="expand">le texte</button>  
        <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?</p>
      </div>
    L'idée est d'associer les classes, pseudo-élément, pseudo-classe et les sélecteurs d'adjacence du CSS pour afficher/masquer des éléments.

    L'apport du javascript devient des plus simple et succinct, au moins à partir de IE10
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var oBtns = document.querySelectorAll('BUTTON.expand'),
        i, nbr = oBtns.length;
    for( i=0; i < nbr; i++){
        oBtns[i].onclick = function(){
        this.classList.toggle('visible');
      };
    }
    Le CSS utilisé est le suivant
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    button.expand:before {
      content:"Afficher ";
    }
    button.expand ~P{
      display:none;
    }
    button.expand.visible:before{
      content:"Masquer ";
    }
    button.expand.visible ~P{
      display:block;
    }

    Pour tester cela le fichier d'exemple
    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
    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
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <meta charset="UTF-8">
    <title>Afficher/Masquer avec CSS et JavaScript</title>
    <meta name="Author" content="NoSmoking">
    <style>
    html, body {
      font: 1em/1.5 Verdana,sans-serif;
    }
    div {
      margin:1em;
    }
    h1{
      color:#006699;
    }
    button.expand{
      border:1px solid #CCC;
      background:#F5F5F5;
      padding:0;
      line-height:2em;
      font-size:1em;
      width:10em;
      cursor:pointer;
    }
    button.expand:hover{
      border:1px solid #4D90FE;
      color:#4D90FE;
    }
    button.expand:before {
      content:"Afficher ";
    }
    button.expand ~P{
      display:none;
    }
    button.expand.visible:before{
      content:"Masquer ";
    }
    button.expand.visible ~P{
      display:block;
    }
    </style>
    </head>
    <body>
    <div id="page">
      <h1>Afficher/Masquer avec CSS et JavaScript</h1>
      <div>
        <button class="expand visible">le texte</button>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum</p>
      </div>
      <div>
        <button class="expand">le texte</button>
        <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?</p>
      </div>
    </div>
    <script>
    var oBtns = document.querySelectorAll('BUTTON.expand'),
        i, nbr = oBtns.length;
    for( i=0; i < nbr; i++){
      oBtns[i].onclick = function(){
        this.classList.toggle('visible');
      };
    }
    </script>
    </body>
    </html>

    <troll>
    Golgotha, voilà pas un zeste de jQuery
    </troll>

  6. #6
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 386
    Points : 3 531
    Points
    3 531
    Billets dans le blog
    1
    Par défaut
    Pas mal, pas mal.. Dommage qu'il y ai ce vilain querySelectorAll....
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  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
    Qu'est-ce qu'il a ce querySelectorAll ? Pour quelqu'un qui propose un code jQuery, je vois mal en quoi ça dérange
    One Web to rule them all

  8. #8
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 386
    Points : 3 531
    Points
    3 531
    Billets dans le blog
    1
    Par défaut
    "document.querySelectorAll" ... C'est trop verbeux

    Pensez à nos petit doigts de développeurs quand ont aura 90 ans !!
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  9. #9
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    C'est vrai que c'est assez verbeux, mais l'avantage, c'est qu'à priori, on comprend immédiatement ce que fait cette méthode.
    Et rassure-toi, quand tu auras 90 ans, j'imagine qu'on ne codera plus au clavier mais en reconnaissance vocale.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 39
    Points : 33
    Points
    33
    Par défaut
    En mixant mon code avec celui de Sylvain PV, je m'en suis sorti (problème entre none et hidden...)

    Merci à tous pour vos réponses précieuses !

  11. #11
    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
    Citation Envoyé par tolliob Voir le message
    problème entre none et hidden...
    Oops oui bien sûr c'est none et pas hidden. Personne n'a remarqué ma bourde en plus

    @Golgotha: var $ = document.querySelectorAll pour les fans du dollar sign. Ah et il y a document.query et document.queryAll qui vont arriver également.
    One Web to rule them all

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

Discussions similaires

  1. Fonction JavaScript ne s'exécute qu'une seconde
    Par zozoman dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 21/05/2013, 09h49
  2. Réponses: 6
    Dernier message: 08/03/2011, 16h33
  3. Réponses: 3
    Dernier message: 17/08/2006, 14h43
  4. Réponses: 4
    Dernier message: 09/08/2006, 10h41
  5. [CSS] propriété resizable pour une div ?
    Par 10-nice dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 22/09/2005, 10h12

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