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 Afficher/Masquer des div


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 257
    Par défaut Fonction Afficher/Masquer des div
    Bonjour,

    Je m'arrache un peu les cheveux là-dessus:

    Il y a plusieurs div de style visibility='hidden';
    et plusieurs bouttons avec
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="show_edit('id_de_la_div')"
    Code js : 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
    function show_edit(what) { 
    	// Masquer toutes les div > OK
    	  var elems = document.getElementsByClassName('edit');
    	  for(var i = 0; i < elems.length; i++) {
                elems[i].style.visibility='hidden';
             }
    	// Afficher la div en question >  No :calim2:
    	the_element=document.getElementById(what);
    	if (the_element.style.visibility=='visible') 
    		{
     		  the_element.style.visibility='hidden';console.log('1');
    		} 
    	else {
    		the_element.style.visibility='visible';console.log('2');
    		}
     
    	console.log(what+' > '+the_element.style.visibility);
    }
    Ben ca reste sur 'visible'.
    Auriez-vous une idée ?
    Merci

  2. #2
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 130
    Par défaut
    Salut

    Inserts console.log('the_element.style.visibility >>> ' + the_element.style.visibility)avant ta ligne if.
    Lances ton projet, ouvre l'outil de développement de ton navigateur pour vérifier l'état de visibility .
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- Merci de montrer un code COMPLET * , qu'on puisse TESTER.
    * code nécessaire et suffisant : JS + HTML + CSS associé.

    2- D'autre part, as-tu fait une recherche avant ??
    (ce ne sont pas les discussions qui manquent sur ce sujet !)
    "afficher/masquer div JS"


    3- En l'occurrence, puisque tu passes tous les div en visibility:hidden (avec la boucle), normal que le div cliqué soit toujours visible.
    Du coup, ton test if(...) ne sert à rien.
    Dernière modification par Invité ; 11/07/2019 à 11h23.

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 257
    Par défaut
    Bonsoir,
    D'abord, merci de vos réponses.
    Ensuite, désolé, de ma bêtise.
    @jreaux62
    - J'avais choisi de ne pas mettre le code complet,
    pensant que ca aurait été lourd à lire et à décrypter.
    - C'est vrai, je n'ai pas fais de recherche, mais je ne voyais pas comment la formuler
    (aussi de créer des post à tire-la-rigot, ca doit surcharger inutilement developpez.net, je suis d'accord )
    .
    - puisque tu passes tous les div en visibility:hidden (avec la boucle), normal que le div cliqué soit toujours visible.
    Et oui, c'est idiot
    @ ProgElecT
    Je voyais bien ca dans la console (c'est mon cpu perso, ne comprenait pas)

    C'est un bug cognitif.
    Il fallait que je passe par une simple réflexion:
    1- Masquer tous les div
    2- (Re-)Donner à chaque bouton la fonction show
    3- Donner au bouton cliqué la fonction hide
    4- Afficher la div

    J'ai fait ça (réfléchir )
    donc ça fonctionne.

    Désolé
    Bonne soirée ou journée.

    PS: je pourrais modifier la citation de Mark Twain en:
    "Ils n'y avaient pas réfléchi, alors ils ne l'ont pas fait."

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Voici une solution : https://codepen.io/jreaux62/pen/RzpzKP

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <button type="button" class="btn-edit" data-id="div-1">1</button>
    <button type="button" class="btn-edit" data-id="div-2">2</button>
    <button type="button" class="btn-edit" data-id="div-3">3</button>
    <button type="button" class="btn-edit" data-id="div-4">4</button>
     
    <div class="edit" id="div-1">contenu 1</div>
    <div class="edit" id="div-2">contenu 2</div>
    <div class="edit" id="div-3">contenu 3</div>
    <div class="edit" id="div-4">contenu 4</div>
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .btn-edit { display:inline-block; }
    .edit { visibility:hidden; }
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    'use strict';
    const btns = Array.from(document.querySelectorAll('.btn-edit'));
    const elts = Array.from(document.querySelectorAll('.edit'));
    btns.forEach( function(btn) {
      btn.addEventListener('click', function() {
        let this_id = btn.dataset.id;
        // Masquer toutes les autres div + toggle celle cliquée
        elts.forEach( function(elt) {
          elt.style.visibility = (   
            ( elt.id != this_id ) // autres div
            || ( elt.id == this_id && elt.style.visibility == 'visible' ) // celle cliquée visible ?
          )? 'hidden' : 'visible';
        });
      });
    });
    Variante :
    au lieu de visibility 'hidden' / 'visible', on peut utiliser display 'none' / 'block'.
    (je vous laisse TESTER la différence à l'affichage...)
    Dernière modification par Invité ; 11/07/2019 à 11h24.

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 257
    Par défaut
    Salut, jreaux62
    J'avais vu le message mais pas le temps d'y répondre.
    Mon 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
    <!-- bouton 1 -->
    <i class="fa fa-pencil awesome" onclick="show_edit('edit_1')"></i>
    <!-- div 1 -->
    <div id="edit_1" class="edit"> 
    	<p>Texte 1</p>
    	<textarea name="text_1">Texte 1</textarea>
    </div>
    <!-- bouton 2 -->
    <i class="fa fa-pencil awesome" onclick="show_edit('edit_2')"></i>
    <!-- div 2 -->
    <div id="edit_2" class="edit"> 
    	<p>Texte 2</p>
    	<textarea name="text_2">Texte 2</textarea>
    </div>
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .edit {
    		visibility: hidden;
    	}
    Code js : 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
    function show_edit(what) { 
    	// Masquer tout
    	var elems = document.getElementsByClassName('edit');
    	for(var i = 0; i < elems.length; i++) {
    		elems[i].style.visibility='hidden';
    		}
    	// 'onClick',"show_edit" pour tout les boutons
    	var elems = document.getElementsByClassName('awesome');
    	for(var i = 0; i < elems.length; i++) {
    		var name_of_div=elems[i].id.replace('_fa','');
    		elems[i].setAttribute('onClick',"show_edit('"+name_of_div+"');");
    		console.log(name_of_div);
    		}
    	// Montrer le div en question
    		document.getElementById(what).style.visibility='visible';
    	// Changer le onclick
    		document.getElementById(what+'_fa').setAttribute('onClick',"hide_edit('"+what+"');");
    }
    function hide_edit(what) {
    	// Masquer le div en question
    		document.getElementById(what).style.visibility='hidden';
    	// Changer le onclick
    		document.getElementById(what+'_fa').setAttribute('onClick',"show_edit('"+what+"');");
    }
    C'est bien moins poussé que le tien.

    Et je suis totalement d'accord avec l'entre-aide et developpez.net
    Merci des réponses.

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

Discussions similaires

  1. afficher masquer des divs
    Par chris801 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 13/09/2011, 14h42
  2. Afficher/Masquer des div
    Par chris801 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/02/2011, 13h47
  3. Afficher / Masquer des div
    Par spawns dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 20/11/2008, 15h41
  4. Afficher / Masquer des DIV
    Par Bounty59 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/01/2007, 10h33
  5. Afficher / masquer des div
    Par Galaad dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 28/08/2006, 21h57

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