Fermer bloc au click pour ouvrir un autre bloc

Fermé
mont_dani Messages postés 229 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 10 février 2024 - 11 déc. 2022 à 13:22
mont_dani Messages postés 229 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 10 février 2024 - 12 déc. 2022 à 07:47

Bonjour

Je dispose de bloc d'information ou est visible le titre. Le visiteur clique sur "voir" pour lire l'info.

Mon problème: en cliquant sur la deuxième info a voir, la première info visitée reste ouverte.

Comment faire pour fermer l'info active au clique sur une autre info.

Voici mon code html.

        <div class="libro">
			<div class="libronombre"><b>titre</b> </div>
			<p id="texte_court2020" style="padding: 10px;">pour le texte court</p>
			
			<div id="a_manipuler2020"style="display: none; margin:5%;">
			
			ici l'ìnfo complete
			</div>
			<div align="center">
				<button class="button_libro" style="align: center;"id="toaffich2020" onclick="affichManipul(2020)"><?php echo $vermas;?></button>
				<br><br>
			</div>
		</div> 

 <div class="libro">
			<div class="libronombre"><b>titre 2</b> </div>
			<p id="texte_court2022" style="padding: 10px;">pour le texte court info 2</p>
			
			<div id="a_manipuler2022"style="display: none; margin:5%;">
			
			ici l'ìnfo 2 complete
			</div>
			<div align="center">
				<button class="button_libro" style="align: center;"id="toaffich2022" onclick="affichManipul(2022)"><?php echo $vermas;?></button>
				<br><br>
			</div>
		</div> 

et un peu de JS

<script type="text/javascript">

function affichManipul(chaine_caratere){
	
  if(document.getElementById('a_manipuler'+chaine_caratere).style.display == "none") {
    document.getElementById('a_manipuler'+chaine_caratere).style.display = "block";
    document.getElementById('texte_court'+chaine_caratere).style.display = "none";
    document.getElementById('toaffich'+chaine_caratere).innerHTML = "<?php echo $volver; ?>";
  } else {
    document.getElementById('a_manipuler'+chaine_caratere).style.display = "none";
    document.getElementById('texte_court'+chaine_caratere).style.display = "block";
    document.getElementById('toaffich'+chaine_caratere).innerHTML = "<?php echo $vermas; ?>";
  }
}
</script>

Merci pour votre aide

A voir également:

8 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
Modifié le 11 déc. 2022 à 17:43

Bonjour,

Tu ajoutes une "class" à tes div  et tu les masques toutes avant d'afficher celle que tu veux.

<div id="a_manipuler2020" class="peuimporte" style="display: none; margin:5%;">
function affichManipul(chaine_caratere){
	
   //on masque toutes les divs
   var divs = document.querySelectorAll(".peuimporte");// il manquait un point
   [].forEach.call(divs, function(div) {
       // do whatever
       div.style.display= "none";
   });

  //la suite de ton code...
  if(document.getElementById('a_manipuler'+chaine_caratere).style.display == "none") {

0
mont_dani Messages postés 229 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 10 février 2024
11 déc. 2022 à 16:41

Merci Jordane pour ta réponse.

J'ai bien compris comment tu procède mais cela ne focntionne pas et mes notions de JS sont tres limitées pour apporté un complément ou une correction.

Aurais-tu une suggestion?

0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
11 déc. 2022 à 17:23

Comme à chaque fois .... montre nous le code que tu as modifié afin que l'on puisse voir où tu se trouve l'éventuelle erreur

Pense aussi à regarder dans la console du navigateur si il n'y aurait pas des messages d'erreur pouvant expliquer le souci.

0
mont_dani Messages postés 229 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 10 février 2024
11 déc. 2022 à 17:39
  <div class="libro">
			<div class="libronombre"><b>titre</b> </div>
			<p id="texte_court2020" style="padding: 10px;">pour le texte court</p>
			
			<div id="a_manipuler2020" class="invisible" style="display: none; margin:5%;">
			
			ici l'ìnfo complete
			</div>
			<div align="center">
				<button class="button_libro" style="align: center;"id="toaffich2020" onclick="affichManipul(2020)"><?php echo $vermas;?></button>
				<br><br>
			</div>
		</div> 

 <div class="libro">
			<div class="libronombre"><b>titre 2</b> </div>
			<p id="texte_court2022" style="padding: 10px;">pour le texte court info 2</p>
			
			<div id="a_manipuler2022" class="invisible" style="display: none; margin:5%;">
			
			ici l'ìnfo 2 complete
			</div>
			<div align="center">
				<button class="button_libro" style="align: center;"id="toaffich2022" onclick="affichManipul(2022)"><?php echo $vermas;?></button>
				<br><br>
			</div>
		</div> 

et le JS

   
function affichManipul(chaine_caratere){
	//on masque toutes les divs
   var divs = document.querySelectorAll("invisible");
   [].forEach.call(divs, function(div) {
       // do whatever
       div.style.display= "none";
   });
   
  if(document.getElementById('a_manipuler'+chaine_caratere).style.display == "none") {
    document.getElementById('a_manipuler'+chaine_caratere).style.display = "block";
    document.getElementById('texte_court'+chaine_caratere).style.display = "none";
    document.getElementById('toaffich'+chaine_caratere).innerHTML = "<?php echo $volver; ?>";
  } else {
    document.getElementById('a_manipuler'+chaine_caratere).style.display = "none";
    document.getElementById('texte_court'+chaine_caratere).style.display = "block";
    document.getElementById('toaffich'+chaine_caratere).innerHTML = "<?php echo $vermas; ?>";
  }
}

Et bien sur  j'avais jeter un coup d'oeil sur la console et il n'y a pas de message d'erreur

0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
11 déc. 2022 à 17:42

C'est de ma faute j'ai oublié un point

var divs = document.querySelectorAll(".invisible");
   [].forEach.call(divs, function(div) {
0
mont_dani Messages postés 229 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 10 février 2024
11 déc. 2022 à 17:59

Super. Ne t'inquiette pas, pour moi "seulement ceux qui ne font rien ne risquent pas de se tromper" et pour cela l'erreur est humaine.

Merci

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mont_dani Messages postés 229 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 10 février 2024
11 déc. 2022 à 18:51

Oups j'ai été trop vite.

Quand je clique sur le bouton pour fermer, cela ne fonctionne plus. Pour fermer je suis obligé de cliquer pour ouvrir un autre bloc.

0
mont_dani Messages postés 229 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 10 février 2024
11 déc. 2022 à 20:19

Aie Aie le premier bloc reste ouvert après ouverture du second bloc et quand je clique sur "fermer" tout se ferme.

   
function affichManipul(chaine_caratere){
	  
  if(document.getElementById('a_manipuler'+chaine_caratere).style.display == "none") {
    document.getElementById('a_manipuler'+chaine_caratere).style.display = "block";
    document.getElementById('texte_court'+chaine_caratere).style.display = "none";
    document.getElementById('toaffich'+chaine_caratere).innerHTML = "<?php echo $volver; ?>";
  } else {
	  
   //on masque toutes les divs
   var divs = document.querySelectorAll(".invisible");
   [].forEach.call(divs, function(div) {
       // do whatever
       div.style.display= "none";
   });
    document.getElementById('a_manipuler'+chaine_caratere).style.display = "none";
    document.getElementById('texte_court'+chaine_caratere).style.display = "block";
    document.getElementById('toaffich'+chaine_caratere).innerHTML = "<?php echo $vermas; ?>";
	
  }
}

Ce n'est peut être pas possible de fermer le bloc actif en cliquant sur "ouvrir" un autre bloc et aussi  de pouvoir fermer le bloc actif en cliquant sur "fermer" sans avoir a ouvrir un autre bloc...

0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
11 déc. 2022 à 20:21

Correction ( testée cette fois )

 function hideAllBlocks(){
  	//on masque toutes les divs
  
     var divs = document.querySelectorAll(".invisible");
     [].forEach.call(divs, function(div) {
         // do whatever
         console.log('On masque la div', div.id);
         div.style.display= "none";
     });
     
      // et on met le text "afficher" sur tous les boutons
    var btns = document.querySelectorAll(".invisible> div > button ");
     [].forEach.call(btns, function(btn) {
      console.log("On modifie le text du bouton :", btn.id);
      btn.innerHTML = "Afficher";
     });
   }
function affichManipul(chaine_caratere){
  console.log('DIV',chaine_caratere, document.getElementById('a_manipuler'+chaine_caratere).style.display);
  if( document.getElementById('a_manipuler'+chaine_caratere).style.display == 'none'){
  hideAllBlocks();
  //on affiche la div voulue
  document.getElementById('a_manipuler'+chaine_caratere).style.display = 'block';
  //on met le texte "Masquer" sur le bouton correspondant
  document.getElementById('toaffich'+chaine_caratere).innerHTML = "Masquer";
  }else{
    hideAllBlocks();
  }
}

0
mont_dani Messages postés 229 Date d'inscription mardi 6 juin 2017 Statut Membre Dernière intervention 10 février 2024
12 déc. 2022 à 07:47

SUPER CA MARCHE.

un petit detail: quand je ferme un DIV le bouton reste sur "Masquer" au lieu d'indiquer "afficher"

0