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
    Membre averti
    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
    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 chevronn�
    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
    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
    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.

  4. #4
    Membre extr�mement actif
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Ao�t 2007
    Messages
    1 387
    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 387
    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
    17 211
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    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 extr�mement actif
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Ao�t 2007
    Messages
    1 387
    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 387
    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
    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

  8. #8
    Membre extr�mement actif
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Ao�t 2007
    Messages
    1 387
    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 387
    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 : 55
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    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
    Membre averti
    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
    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
    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.

+ 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