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 :

Boucle de display block/none


Sujet :

JavaScript

  1. #1
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut Boucle de display block/none
    Bonjour,

    Dans une page php j'ai un type checkbox avec un onchange dans un <form..., ainsi qu'une série de "n" de balises <a> incrémentées

    Ex: <a id="lien1" ... / <a id="lien2" ... etc.

    Dans un fichier javascript, je souhaite parvenir à masquer ou afficher l'ensemble de ces liens incrémentés mais je ne suis pas sur de la méthode,
    qu'en pensez vous ? D'ailleurs je ne sais pas comment remplacer < 9 par un type array ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function ShowHide(id) 
    {
    	for (i = 1; i < 9; i++) { 
    	      var showHide = (document.getElementById(id+i).style.display == 'none' ) ? 'block' : 'none';
    	      document.getElementById(id+i).style.display = showHide	 
           }
    }
    Merci d'avance pour votre aide,
    Cordialement,


  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 637
    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 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    getElementById => id pas name ...

    Je ne vois pas à quoi sert de boucler 9 fois sur le même élément, un id étant unique sur une page
    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 actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    9 est un test sur un page mais peut y avoir plus...
    j'ai mis à jour la synthaxe mais ne fonctionne 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 637
    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 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    as tu regardé en console ce que te retournait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    console.log(document.getElementById(id+i).style.display)
    dans ta boucle ?
    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 actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    C'est bon ça fonctionne,

    Comment remplacer 9 par un array ou un truc du genre, quelques soit le nombre de lien ?

    Encore merci

  6. #6
    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 637
    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 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    Utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    querySelectorAll("[id^='"+id+"']")
    qui te retournera la collection des element dont l'id commence par id ...
    tu n'auras plus qu'a boucler dessus
    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 !

  7. #7
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    Comme ceci plus rien fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function ShowHide(id) 
    {
    	for (i = 1; i < document.querySelectorAll("[id^='"+id+"']"); i++) { 
    		var ShowHide = (document.getElementById(id+i).style.display=='none')?'block':'none';
    		document.getElementById(id+i).style.display = ShowHide	 
        }
    }

  8. #8
    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 637
    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 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    comment veux tu qu'une collection soit inférieure à un integer ??? => lenght


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function ShowHide(id) 
    {
     collection= document.querySelectorAll("[id^='"+id+"']");
    cl= collection.length;
     
    	for (i = 1; i < cl); i++) { 
    		collection[i].style.display = (collection[i].style.display=='none')?'block':'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 !

  9. #9
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    fonctionne pas non plus...

    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
    function ShowHide(id) 
    {
    	collection= document.querySelectorAll("[id^='"+id+"']");
    	cl = collection.length;
     
    	for (i = 1; i < cl); i++) { 
    		var ShowHide = (collection[i].style.display=='none')?'block':'none';
    		collection[i].style.display = ShowHide	 
        }
    }
     
     
    ou
     
     
     
    function ShowHide(id) 
    {
     collection= document.querySelectorAll("[id^='"+id+"']");
    cl= collection.length;
     
    	for (i = 1; i < cl); i++) { 
    		collection[i].style.display = (collection[i].style.display=='none')?'block':'none';
        }
    }

  10. #10
    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 637
    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 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    https://jsfiddle.net/k9m8Lvuj/

    le style.display n'est pas initialisé au début, il faut passer par getComptuedSyyle
    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 !

  11. #11
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    Bravo c'est exactement ce que je cherchais à faire !!

    Effectivement, faut penser à initialiser les balises à afficher => <a id="lenomdulien1" style="display:none ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function ShowHide(id) 
    {
    	collection = document.querySelectorAll("[id^='"+id+"']");
    	cl = collection.length;
    	for (i = 0; i < cl; i++) { 
    		display = window.getComputedStyle(collection[i], null).getPropertyValue("display");
    		collection[i].style.display = (display=='none')?'block':'none';
        }
    }
    Remerciement,
    Bonne soirée.


  12. #12
    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,
    dans bien des cas on peut également faire un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oElem[i].style.display = oElem[i].offsetHeight ? 'none' : 'block';

  13. #13
    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 637
    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 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    Ha oui le offsetHeight est une astuce pour contourner le getComputedStyle.

    pour être un peu plus complet on peut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     function isVisble(elemt){
     return !!( elemt.offsetWidth || elemt.offsetHeight || elemt.getClientRects().length );
    }
    le script devient alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function ShowHide(id) 
    {
    	collection = document.querySelectorAll("[id^='"+id+"']");
    	cl = collection.length;
    	for (i = 0; i < cl; i++) { 
    		collection[i].style.display = (isVisible(collection[i]))?'block':'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 !

  14. #14
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    Dans le même genre, 2 checkbox (affiche/masque) individuellement des coins (pull-left/pull-right) sur une collection de boutons et affichent des infos complémentaires...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input id="check1" type="checkbox" onchange="ShowHide('mag_numero'); ResizeBtn('btn_mag');"><span> Numéros des mags </span> &nbsp; <input id="check2" type="checkbox"" onchange="ShowHide('nombre_articles'); ResizeBtn('btn_mag');"><span> Nombre d'articles </span>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a id="btn_mag<?php echo $field['numero_mag']; ?>" class="btn btn-success btn-lg ?>" style="width:auto; min-width:250px; height:37px; ..."><span id="numero_mag<?php echo $field['numero_mag']; ?>" class="pull-left" style="display:none; ..."><?php echo $field['numero_mag']; ?></span><span id="articles<?php echo $field['nombre_articles']; ?>" class="pull-right" style="display:none; ..."><?php echo $field['nombre_articles']; ?></span><?php echo $field['mag_theme'] ?></a>
    Avec la fonction précédende ShowHide(), j'affiche bien les coins individuellement mais dans la fonction suivante, je recherche à savoir si check1 OU check2 est bien coché pour modifier le width du bouton (<a id="btn_mag....) ; Tout fonctionne parfaitement, jusqu'a ce que je change width:250px; par width:auto; min-width:250px;, la fontion devient alors très instable, le retour "widthValue" semble se confondre avec "max-width" ...

    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
    function ResizeBtn(id) 
    {
    	collection = document.querySelectorAll("[id^='"+id+"']");
    	co = collection.length;
    	for (i = 0; i < co; i++) { 
    		widthValue= parseInt(window.getComputedStyle(collection[i], null).getPropertyValue('width'));
     
    		//alert(width);
    		//collection[i].style.width = (width=='155')?width+26+'px':'';
     
    		if (document.getElementById("check1").checked) {
    			collection[i].style.width = widthValue+26+'px';
    		}
    		else {
    			collection[i].style.width = widthValue-26+'px';
    		}
    		if (document.getElementById("check2").checked) {
    			collection[i].style.width = widthValue+26+'px';
    		}
    		else {
    			collection[i].style.width = widthValue-26+'px';
    		}
     
    	}
     
    //
    //	for (i = 1; i < 40; i++) { 
    //	      var showHide = (document.getElementById(id+i).style.display == 'none' ) ? 'block' : 'none';
    //	      document.getElementById(id+i).style.display = showHide	 
    //     }
     
    }
    (ça fonctionne que si j'utilise 2 fonctions individuelles pour chaque checkbox....)

    Merci d'avance pour vos idées

  15. #15
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    Problème résolu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function ResizeBtn(id, chekboxId, addWidth) 
    {
    	collection = document.querySelectorAll("[id^='"+id+"']");
    	co = collection.length;
    	for (i = 0; i < co; i++) { 
    		collection[i].style.width = (document.getElementById(chekboxId).checked)?collection[i].offsetWidth+addWidth+'px':collection[i].offsetWidth-addWidth+'px';
    	}
    }

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

Discussions similaires

  1. Display:none & display:block
    Par RicardoBxl dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 16/01/2013, 22h49
  2. Display:none & Display:block
    Par RicardoBxl dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 11/01/2013, 21h19
  3. Affichage fenetre en display block et none + map
    Par bentakag dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 16/07/2012, 22h21
  4. Display block/none en cascade
    Par emmeline.a dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 27/07/2010, 12h14
  5. style.display block, none.. IE et firefox
    Par zevince dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 03/08/2006, 15h14

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