Des boutons pour agir sur la bonne cible

Résolu/Fermé
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 - Modifié le 16 avril 2022 à 08:11
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 - 17 avril 2022 à 18:33
Bonjour à tous,

Je n'ai pas trouvé le forum pour le css, mais comme je suis pas sûr que ma question ne concerne pas un peu
JavaScript, je me permets de la poster ici...


J'ai une table alimentée par une bdd dont certains tr/td/div contiennent le détail d'une prestation que l'utilisateur peut afficher à sa convenance en cliquant sur un bouton. Le code que j'ai trouvé sur Internet et adapté à mon cas fonctionne bien pour le premier enregistrement de la bdd, mais le bouton des suivants ouvre systématiquement le premier tr !!!

Voici ce que j'ai écrit, tout d'abord la table :
<tbody>
   <?php
      $i=0;
      while ($data_prestations=$req_prestations->fetch()) {?>
   <tr class="tractive <?php echo (++$i%2==0 ? "trclair" : "trsombre")?>">
      <td class="tdactive" data-label="TYPE">
         <div>
            <?php 
               echo $data_prestations['designation'];
               if($data_prestations['descriptif']<>NULL){
                   //echo '<button class="bouton" type="button" >Détail</button>';
                   echo '<button class="bouton" type="button"><img src="img/dw.png"/></button>';
               }
               ?>
         </div>
      </td>
      <td data-label="QTÉS" class="td-droite td-prestations tdactive">
         <div>
            <?php
               $quantites = $data_prestations['quantites'];
               echo number_format($quantites, 2, ",", ".") . '  ';
               ?>
         </div>
      </td>
      <td data-label="PRIX" class="td-droite td-prix tdactive">
         <div>
            <?php
               $prix = $data_prestations['prix'];
               echo number_format($prix, 2, ",", ".") . ' €';
               $total = $quantites*$prix;
               $total_g=$total_g+$total;
               ?>
         </div>
      </td>
      <td data-label="TOTAL" class="td-droite total td-prix tdactive">
         <div>
            <?php
               echo number_format($total, 2, ",", ".") . ' €';
               ?>
         </div>
      </td>
   </tr>
   <?php
      if($data_prestations['descriptif']<>NULL){?>
   <tr class="<?php echo ($i%2==0 ? "trclair" : "trsombre");?>">
      <td class="tdactive" data-label="DÉTAIL" colspan="4">
         <div class="divactive">
            <?php echo $data_prestations['descriptif'];?>
         </div>
      </td>
   </tr>
   <?php
      }
      }?>
</tbody>


puis le css qui assure l'apparition en douceur de la div :

.divactive {
    overflow: auto;
}


tr.trcible td div{
    display: none;
}

tr td div {
  max-height: 0;
  padding: 0 10px;
  box-sizing: border-box;
  overflow: hidden;
  transition: max-height 0.3s, padding 0.3s;
}
tr.tractive td div {
  max-height: 100px;
  padding: 10px 10px;
  transition: max-height 0.6s, padding 0.6s;
}

.bouton {
  float: right;
  background-color: transparent;
}




Et enfin le JavaScript :
<script src="../js/jquery.min.js"></script>
$('button').on('click', function(){
    $('tr:nth-child(2)').toggleClass('tractive');
});



Merci d'avance à celui ou ceux qui auront une idée sur l'origine de mon problème !


Configuration: Linux / Chrome 99.0.4844.84

3 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
Modifié le 16 avril 2022 à 08:52
Bonjour,

e bouton des suivants ouvre systématiquement le premier tr !!!

Normal ...Tu cibles systématiquement le second TR
  $('tr:nth-child(2)')

Il faut donc modifier ton code pour cibler le TR qui se trouve APRES le bouton.
Donc, en utilisant un selecteur du genre
$(this).parent('tr').next('tr')




0
firpic Messages postés 90 Date d'inscription jeudi 3 juin 2021 Statut Membre Dernière intervention 20 décembre 2022 1
16 avril 2022 à 09:03
Bonjour,

Tu ne spécifie qu'elle bouton doit exécute ce code. Et va regarder la doc, cela peut bien aider https://jquery.com/#home-content

J'ai choisi la class next pour ton bouton mais tu l'adaptera a tes besoin. Et j'ai aussi repris le changement fais par Jordan45

$('button.next').on('click', function(){
$(this).parent('tr').next('tr').toggleClass('tractive');
0
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 20
16 avril 2022 à 11:54
Tout d'abord merci à vous deux pour vous pencher sur ma question.

Je suis désolé mais mon faible niveau en JavaScript ne m'a pas permis de régler mon problème
en mettant en application vos solutions !

J'ai tout essayé :

$('button').on('click', function(){
$(this).parent('tr').next('tr').toggleClass('tractive');
});

ou
$('button.next').on('click', function(){
$(this).parent('tr').next('tr').toggleClass('tractive');
});

puis
function bouton(){
$(this).parent('tr').next('tr').toggleClass('tractive');
};

avec ça :
function bouton(event){ .../...

avec echo '<button class="bouton" onclick="bouton(this) type="button"><img src="img/dw.png"/></button>';


Bref je ne sais pas résoudre ça, et la doc de jquery ne m'aide pas plus !
0
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 20
17 avril 2022 à 18:33
Après des heures de galères, tests et recherche j'ai trouvé ça qui fonctionne !!!
$('button').on('click', function(){
    $(this).closest('tr').next('tr').toggleClass('tractive');
});
0