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/Cacher du texte via un click


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 119
    Par défaut Afficher/Cacher du texte via un click
    Bonjour à tous!!

    J'ai pas touché à js depuis un petit moment, et je tombe sur un problême qui, je pense m'aurait paru simplissime il y a quelque temps...

    J'ai dans ma page des div comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <div class="message" onlick="display()"><p> titre </p><p> corps du message</p></div>
    J'ai dans ma feuille de style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    .message:nth-child(2){
      display : none;
    }
    Je souhaite donc avoir une fonction javascript qui, lorsque je clique sur ma div, affiche le "corps du message". J'ai donc fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function display(){
      var msg=this.childNodes[1];
      if(msg.style.display == 'none'){
          msg.style.display='block';
      }else{
         msg.style.display='none';
      }
    }

    Et ce code n'a strictement aucun effet!
    S'il vous plait, quelqu'un peut il m'expliquer pourquoi, et m'aider à résoudre mon problème?

    Merci beaucoup en tout cas.

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 119
    Par défaut
    Le problème doit venir de ma manière de modifier les css...
    Puis que si je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function display(){
      alert("coucou");
    }
    Ca fontionne, mais si par exemple je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function display(){
      this.style.color='red';
    }
    une fois encore rien ne se passe...
    help

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour,
    plusieurs erreurs se sont glissées dans ton code
    <div class="message" onclick="display()">
    ensuite dans ta fonction display, pas très heureux comme nom de fonction d'ailleurs, le this est en fait l'objet window, dans ton cas il te faut passer en paramètre l'objet cliqué, le this
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div class="message" onclick="displayMsg(this)">
    et dans ta fonction utiliser celui ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function displayMsg( obj){
      var msg=obj.childNodes[1];
      if(msg.style.display == 'none'){
          msg.style.display='block';
      }else{
         msg.style.display='none';
      }
    }

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 119
    Par défaut
    Bonsoir, et merci de votre réponse!

    Alors, désolé pour le c manquant sur "onclick" c'est parce que j'ai recopié à la main... Mais il était bien présent dans mon code.

    Je me permets de poster la <div> à modifier dans mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    		<div class=message onClick="displayMsg(this)"><p><?php echo '<a href="'.$url.'recherche.php?pseudo='.$msg[1].'">'.$msg[1].'</a>
                    -  '.date('d/m/y h:i:s', strtotime($date));?></p>
    		<?php echo '<p>'.$msg[0].'</p>'; ?>
    		</div>
    Je souhaite donc que la partie "<?php echo '<p>'.$msg[0].'</p>'; ?>", n'apparaisse que lorsque je clique sur la <div> de class "message"...

    J'ai donc la fonction javascript suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	function displayMsg(obj)
    	{
    	  var msg=obj.childNodes[1];
    	  if(msg.style.display == 'none'){
    	      msg.style.display='block';
    	  }else{
    	      msg.style.display='none';
    	  }
    	}
    ... Mais toujours rien ne se passe.
    Je suis sur ce site depuis 8h du matin! Ca devient dur

    merci de votre aide!

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    normal, il y a une subtilité... ce ne serait pas marrant sans

    comme tu généres ton code via PHP inséres directement dans la balise P style="display:none"
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo '<p style="display:none">'.$msg[0].'</p>'; ?>

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 119
    Par défaut
    Merci encore de t'occuper de moi ^^

    J'ai donc cette fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <div class=message onClick="displayMsg(this)"><p><?php echo '<a href="'.$url.'recherche.php?pseudo='.$msg[1].'">'.$msg[1].'</a>
    -  '.date('d/m/y h:i:s', strtotime($date));?></p>
    <?php echo '<p style="display:none">'.$msg[0].'</p>'; ?>
    </div>
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	function displayMsg(obj)
    	{
    	  var msg=obj.childNodes[1];
    	  if(msg.style.display == 'none'){
    	      msg.style.display='block';
    	  }else{
    	      msg.style.display='none';
    	  }
    	}
    ... Et toujours rien.
    Je comprends vraiment pas...

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    ... Et toujours rien.
    Je comprends vraiment pas...
    maintenant observes la construction de ton document,
    <P><A>....</A></P><P>...</P>
    mais ce n'est pas ce que voit les navigateurs, cela doit marcher sous IE mais pas sous FireFox qui voit ton document comme cela
    <P><A>....</A></P>#text
    <P>...</P>
    ou pas loin.

    La solution est que tu obtiennes ton code sur la même ligne, sans retour à la ligne pour ne pas avoir des #text sous FireFox

    Autre solution est le changement de récupération de l'élément à masquer/afficher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function displayMsg( obj){
    //  var msg=obj.childNodes[1];
      var msg=obj.getElementsByTagName('P')[1]; // récup. du 2éme P
      if(msg.style.display == 'none'){
          msg.style.display='block';
      }else{
         msg.style.display='none';
      }
    }

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 05/12/2011, 22h57
  2. Afficher/Cacher un texte en cliquant que un bouton
    Par Deejoh dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 21/11/2007, 19h11
  3. Réponses: 3
    Dernier message: 07/09/2007, 13h07
  4. Ne pas afficher ou cacher un texte
    Par NPortmann dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/12/2006, 10h27
  5. Afficher/Cacher un champs texte
    Par eown dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/04/2006, 10h22

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