Page 1 sur 1

Afficher/cacher un texte dans un boucle while

Posté : 31 mai 2021, 10:05
par Jenjak
Bonjour,

Je bloque sur un problème qui ne me paraissait au départ pourtant pas insurmontable... Je cherche à cacher et afficher une partie du texte avec un bouton dans une boucle while, mais j'ai essayé pas mal de méthodes et toujours sans succès, comment est-ce que je dois aborder la chose ?

Voici le code, le texte que je voudrais dans un premier temps cacher puis afficher avec un bouton est celui dans <div id='$row[computerid]'> seulement pour l'id sélectionnée

while($row = $stmt->fetch(PDO::FETCH_ASSOC)) :
					$macname = $row['computermacname'];
					$values = explode(",", $macname);
					?>
					<script>
					function maFonction() {
					  var div = document.getElementById(<?php echo "$row[computerid]"; ?>);
					  if (div.style.display === "none") {
						div.style.display = "block";
					  } else {
						div.style.display = "none";
					  }
					}
					</script>
					<?php
					
				echo"
				     $row[computerid] - $row[computername] - Dernière connexion le: $row[contact] par $row[personne] - <button onclick='maFonction()'>Bouton</button>
				     <div id='$row[computerid]'  style='display:none;'>Numéro de série: $row[computerserial]<br /><br /><u>Adresses MAC:</u>
					 ";					 
						 for ($i = 1; $i <= 15; $i++) {
							if (isset($values[$i])){
								echo "$values[$i] </i><br />";
							}
						 }
						 if (isset($row['filepath'])){
							echo "<br /><font color='green'>FICHE DE PRET: </font>  <a href='http://wiki/glpi/front/document.send.php?docid=$row[docid]' target='_blank'>$row[filename]</a><br /><br /><br />";	
						 } else {
							echo "<br /><br /><br />";
						 }	
							echo "</div><br /><br />";
				endwhile; 
		}	  
				

Le code ne semble pas fonctionner car je ne récupère pas les bonnes ids dans ma fonction et je ne sais pas vraiment comment faire

Merci d'avance pour votre aide !

Re: Afficher/cacher un texte dans un boucle while

Posté : 31 mai 2021, 11:44
par Shadowwera
Salut,

Je ne comprend pas vraiment où est ton problème. Ta fonction :
function maFonction() {
var div = document.getElementById(<?php echo "$row[computerid]"; ?>);
if (div.style.display === "none") {
div.style.display = "block";
} else {
div.style.display = "none";
}
}
Est t'elle correctement print ? comment est traduit document.getElementById(<?php echo "$row[computerid]"; ?>) ?

Re: Afficher/cacher un texte dans un boucle while

Posté : 31 mai 2021, 13:06
par or 1
10 fonctions javascript avec le même nom, cela ne peut pas marcher.
il faut une seule fonction, en dehors de la boucle, et lui passer l'id en paramètre, cette fois ci dans la boucle.

Re: Afficher/cacher un texte dans un boucle while

Posté : 31 mai 2021, 13:30
par Jenjak
Bonjour,

Merci à vous deux

Le document.getElementById(<?php echo "$row[computerid]"; ?>) ? se traduit dans le code source par des id un peu "au hasard" j'ai l'impression, du coup rien ne colle

Je ne connais pas du tout javascript alors je ne sais pas comment faire passer un id dans une fonction en dehors de la boucle malheureusement

Re: Afficher/cacher un texte dans un boucle while

Posté : 31 mai 2021, 14:42
par Shadowwera
Soit vous faite en sorte que le nom de la fonction change à chaque fois, ce que je ne recommande pas du tout car il y aurais X balise script en fonctions de vos X entité
Soit vous trouvez une manière plus harmonieuse pour faire ce dont vous avez besoin.

Je vous donne une possibilité : faite en sorte que les éléments que vous voulez afficher aient la même class, ensuite transformez votre DOM sélection par getElementsByClassNames ( qui vous donnera un array contenant chacun de ces éléments ) puis pour finir boucler sur le tableau pour afficher ces éléments

En JQuery, vous avez la possibilité de sélectionner les classes de cette manière $('.class'), puis de boucler dessus et les afficher avec prop element.prop("disabled")