Des boutons pour agir sur la bonne cible
Résolu
emrh
Messages postés
427
Date d'inscription
Statut
Membre
Dernière intervention
-
emrh Messages postés 427 Date d'inscription Statut Membre Dernière intervention -
emrh Messages postés 427 Date d'inscription Statut Membre Dernière intervention -
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 :
puis le css qui assure l'apparition en douceur de la div :
Et enfin le JavaScript :
Merci d'avance à celui ou ceux qui auront une idée sur l'origine de mon problème !
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
A voir également:
- Des boutons pour agir sur la bonne cible
- A quoi servent les boutons de couleur sur une telecommande - Guide
- Application pour reconnaître les boutons - Accueil - Outils
- Comment réinitialiser un téléphone avec les boutons - Guide
- Comment faire une capture d'écran sur un samsung sans bouton ? - Guide
- Comment déverrouiller un samsung avec les boutons - Guide
3 réponses
Bonjour,
Normal ...Tu cibles systématiquement le second TR
Il faut donc modifier ton code pour cibler le TR qui se trouve APRES le bouton.
Donc, en utilisant un selecteur du genre
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')
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 !
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 !
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