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 :

Cacher/montrer un DIV dans une cellule contenant un autre DIV


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    379
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 379
    Par défaut Cacher/montrer un DIV dans une cellule contenant un autre DIV
    Bonjour,
    Je ne suis pas trop utilisateur de javascript, mais j'en ai besoin pour pallier un manque du langage de développement que j'utilise...

    Voici le code côté 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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    <script type="text/javascript">
    	  
    	  function DoInitStatut(aComposant, aValeurOrigine) 
          {
            var obj = document.getElementById(aComposant.id)
            if (obj)
            {
            	for (i=0; i < obj.length; i++)
    			{
    				if (obj.options[i].disabled == false)
    			    {
    					if (obj.options[i].value == aValeurOrigine)
    					{
    						obj.options[i].style.color  = 'black';
    						// obj.options[i].style.fontWeight = 'normal';
    					}
    					else	
    					{
    						obj.options[i].style.color  = '#FF6A00';
    						// obj.options[i].style.fontWeight = 'bold';
    					}
    				}
    			}
    		}
    	  }	
          
          function DoRefreshOnChange(aComposant, aValeurOrigine) 
          {
    	        var obj = document.getElementById(aComposant.id)
    	        if (obj)
    	        {
    			var objetlien = obj.parentNode.parentNode;
    
    			if (aComposant.value != aValeurOrigine)
    		        {        	            	        	
    		        	obj.style.color = '#FF6A00';
    	    			if (objetlien)
    			        {
    			        	
    			        	objetlien.style.display = 'inline';
    			        }    	
    		        }
    		        else
    		        {
    		            obj.style.color  = 'black';		            
    		            if (objetlien)
    			        {
    			        	objetlien.style.display = 'none';
    			        }
    		        }		        		        
    	        }
          }
          
          function DoResetStatut(aComposant, aValeurOrigine) 
          {
          	
          }
     </script>
    Le problème se situe en ligne 32 (en rouge ci-dessus) car je n'arrive pas à "atteindre" BlocLienContact ...en chemin relatif car en fait ceci est un extrait de champs colonnes d'une grille où tout ceci est répété...autrement dit, ces blocs sont dupliqués et le comportement est à avoir sur chaque enregistrement (i.e. chaque ligne)

    Aevc la ligne, j'atteinds bien "BlocContact" qui est affiché dans mon alert, mais je voudrais atteindre "BlocLienContact" en dessous du bloc contact en question pour le cacher.

    In fine, je veux afficher un bouton "undo" à côté de la liste déroulante (seulement si la valeur de liste est modifiée) et le cacher si la valeur est inchangée (ou redevient inchangée)...de même qu'actuellement je change la couleur du texte si la valeur de liste est changée ou pas.

    Voici les objets du document...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
       <div id="BlocContact" >
          <div id="BlocListe" >
    		  <apex:selectList size="1" id="ContactMAJGrille" value="{!c.ContactMAJGrille}" onfocus="DoInitStatut(this, '{!c.AtlContact.StatutContact__c}')" onchange="DoRefreshOnChange(this, '{!c.AtlContact.StatutContact__c}')"  >
    		  <apex:selectOptions value="{!StatutsContactGrille}"></apex:selectOptions>	  
    		  </apex:selectList>
    	  </div>
    	  <div id="BlocLienContact" style="display:none;">
    		  <a id="Test" class="inlineEditUndoLink" title="Annuler" href="javascript:DoResetStatut(this, '{!c.AtlContact.StatutContact__c}')"  >
    		  <img width="16px" height="16px" class="inlineEditUndo" alt="Annuler" src="/s.gif"></img>
    		  </a>
    	  </div>
      </div>
    Voici un aperçu visuel pour mieux comprendre la problématique qui n'est pas d'accéder "bêtement" à un DIV unique et connu :



    Quand je change de valeur dans une des listes déroulantes, je veux afficher un petit bouton undo en vis-à-vis comme pour les autres champs dans la capture.

    Merci d'avance pour l'aide

  2. #2
    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
    mais je voudrais atteindre "BlocLienContact"
    Ben, rien de plus simple puisque "BlocLienContact" est un id :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('BlocLienContact');


    Et au passage : le code serveur, on s'en balance, ce que l'on veut voir, c'est le code à partir duquel JavaScript travaille, c'est-à-dire le HTML généré !
    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

  3. #3
    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
    Tiens, j'avais pas fait attention à cette curiosité sémantique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var obj = document.getElementById(aComposant.id)
    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

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    379
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 379
    Par défaut
    des "blocliencontact", j'en ai un pour chaque ligne de ma grille...je doute que le getElementById soit suffisamment doué pour me retourner celui qui est le plus proche ^^ enfin, celui qui est sur la même ligne...

  5. #5
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Citation Envoyé par Unusual Voir le message
    des "blocliencontact", j'en ai un pour chaque ligne de ma grille...je doute que le getElementById soit suffisamment doué pour me retourner celui qui est le plus proche ^^ enfin, celui qui est sur la même ligne...
    grosse erreur ! La valeur d'un id doit être unique dans ta page !

  6. #6
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    379
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 379
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Tiens, j'avais pas fait attention à cette curiosité sémantique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var obj = document.getElementById(aComposant.id)
    Sous SalesForce, on peut définir une partie cliente "type".

    Ainsi, "ContactMAJGrille" n'existe pas au moment de l'exécution, mais je passe le this en paramètre de ma méthode afin d'accèder à l'ID réel, il y a un nom à rallonge qui est obtenu car ces composants sont répétés x fois (c'est une grille)...Cela fait comme un pattern avec un compteur et le nom est généré "automatiquement"...d'où le :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var obj = document.getElementById(aComposant.id)
    qui m'est nécessaire car le code doit être valable pour chaque occurrence de champs, donc pour chaque occurrence de liste...

  7. #7
    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
    Citation Envoyé par Unusual
    Cela fait comme un pattern avec un compteur et le nom est généré "automatiquement"...d'où le :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var obj = document.getElementById(aComposant.id)
    qui m'est nécessaire car le code doit être valable pour chaque occurrence de champs, donc pour chaque occurrence de liste...
    Ca ne changera rien au fait que quel que soit l'id,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var obj = document.getElementById(aComposant.id)
    revient à dire
    et du coup, l'utilité de la variable obj est largement discutable...
    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

  8. #8
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    379
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 379
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var obj = document.getElementById(aComposant.id)
    marche très bien. Ceci me permet déjà de faire apparaître en une couleur modifiée une valeur ayant été changée dans une des listes déroulantes.
    cf Capture ci-dessous, SalesForce génère un Id unique pour le select en question.



    Avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var objetlien = obj.parentNode.parentNode;
    dans objetlien, je pointe bien sur LE "BlocContact" grand-parent de la liste, et je voudrais faire apparaître/disparaître (sous condition) LE BlocLienContact fils de CE BlocContact (autrement dit, le frère du BlockListe parent sur la capture.

    C'est pour cela que je voudrais me servir du DOM pour atteindre "de façon relative" le BlockLienContact en question.

    Y a-t-il un moyen de faire cela ?

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/05/2015, 10h20
  2. Réponses: 4
    Dernier message: 09/07/2014, 09h44
  3. [XL-2010] Lien hypertexte dans une cellule contenant déjà du texte
    Par Ginette54 dans le forum Excel
    Réponses: 6
    Dernier message: 31/05/2014, 13h32
  4. Réponses: 3
    Dernier message: 20/01/2013, 14h40
  5. Positionner 3 div dans une cellule de tableau
    Par max44410 dans le forum Mise en page CSS
    Réponses: 23
    Dernier message: 18/04/2007, 09h56

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