Bonjour à tous,

je suis à la recherche d'un coup de pouce car je ne suis pas encore experte en jQuery.
Je tatone et arrive à certaines choses, mais c'est pas encore de l'évidence à mes yeux lol

Donc, j'ai un tableau qui s'affiche grâce au contenu d'une base de données.
Mon tableau est nommé d'un id="offre", chaque ligne est nommé ainsi <tr id=row_".$id.">
cela me permet de récupérer l'id, chaque ligne est donc unique.
J'utilise ce système parfaitement pour supprimer une ligne, mais voilà je n'arrive pas à appliquer ce même système pour afficher et masquer une ligne.
Pour ce script chaque ligne est nommée <tr id=view_".$id.">.

je vous donne le principe raccourcit du code HTML :

// appel à la base de donnée
// if ($result) {
echo "<table id=\"offre\">";
// boucle while {
echo "<tr id=row_".$id.">"; // ligne pour la suppression
echo "<td>Contenu</td>";
echo "<td><a class=\"supprimer\" href=\"javascript:supprimer(".$id.")\" alt=\"Supprimer\" title=\"Supprimer\">Supprimer</a></td>"; // lien pour supprimer
echo "<a class=\"ouvrir\" href=\"#ouvrir\" style=\"cursor: pointer;\" alt=\"Détails\" title=\"Détails\">Détails</a>"; // lien pour afficher le contenu de la ligne suivante
echo "</tr>";
echo "<tr id=view_".$id.">"; // ligne pour afficher le contenu si ligne précédente existe
echo "<td colspan=2><div id=view><span class=\"myClass\" style=display:none;>";
echo "Contenu";
echo "<p><a class=\"masquer\" href=\"#masquer\">Fermer</a></p></span></div></td>";
echo "</tr>";
}
echo "</table>";
}

A présent le script jQuery pour "Afficher/Masquer" juste après mon tableau

<script>
$(".ouvrir").click(function () {
        $("#view").animate({opacity: 0.7,left: '+=50', height: 'toggle'}, 500, function () {
            $(".myClass").fadeIn(200);
          });
          return false;
        }); 
$(".masquer").click(function () {
        $("#view").animate({opacity: 0.7,left: '+=50', height: 'toggle'}, 500, function () {
            $(".myClass").fadeOut(200);
          });
          return false;
        }); 
</script>

Ce code fonctionne mais sur toutes les lignes bien évidemment.
je ne sais pas comment faire pour qu'il sélectionne une ligne bien précise.

J'ai bien essayé d'adapté le code de suppression que j'ai mais ça ne fonctionne pas.
merci par avance de votre aide

9 réponses


Normal pour lui tu lui dis d'ouvrir ou de fermer toute les div contenant l'id view tu dois je pense refaire un html mieux et après jouer sur les parents et enfants.

Salut
Premierement je serai tois j'eviterais de faire autant d'echo de ce type, je trouve ca illisible !
deuxiemement je retravaillerais ton code afin de ne pas passer par un systeme de <table> mais plutot en <div>
Finalement, il faut te dire que quand tu clique sur le lien "Ouvrir" , tu veux que cela soit la #view suivante qui s'ouvre ! Idem pour "Masquer" !
Donc en clair ca donnerai un truc comme ca !

$(".ouvrir").live('click',function(){
    $(this).next("#view").animate({opacity: 0.7,left: '+=50', height: 'toggle'}, 500, function () {  
             $(this).next(".myClass").fadeOut(200);  
          });  
           return false;  
         });   
});

Si non j'ai sa moi comme code ? :
Le Js :

function afficher_cacher(id)
{
        if(document.getElementById(id).style.visibility=="hidden")
        {
                document.getElementById(id).style.visibility="visible";
                document.getElementById('bouton_'+id).innerHTML='Cacher';
        }
        else
        {
                document.getElementById(id).style.visibility="hidden";
                document.getElementById('bouton_'+id).innerHTML='Afficher';
        }
        return true;
}

et le Html :

<span class="bouton" id="bouton_texte" onclick="javascript:afficher_cacher('texte');"></span>
<div id="texte" class="texte">
//Le contenu ici
</div>
<script type="text/javascript">
//<!--
afficher_cacher('texte');
//-->
</script>

je précise si tu veut en forme de bouton sa donne sa :

function afficher_cacher(id)
{
        if(document.getElementById(id).style.visibility=="hidden")
        {
                document.getElementById(id).style.visibility="visible";
                document.getElementById('bouton_'+id).innerHTML='<input type="button" value="Cacher">';
        }
        else
        {
                document.getElementById(id).style.visibility="hidden";
                document.getElementById('bouton_'+id).innerHTML='<input type="button" value="Afficher">';
        }
        return true;
}

c'est tout aussi bon ^^

Merci beaucoup à vous deux, je ne suis pas encore très familière avec l'utilisation du jQuery.
Je vais donc tester tout ça et vous dire si ça marche bien.
Encore merci de vos réponses.

je viens de tester le code de Roxeur76150

Et voici ce que je vois au chargement de la page :
http://www.vision-du-net.com/Image6.png

quand je clique sur "cacher", voici le résultat :
http://www.vision-du-net.com/Image7.png

Ce qui signifie que le bouton cacher ne se répète pas avec que le contenu lui oui.
Pourtant il est dans la boucle while avec les données.

Pouvez-vous m'indiquer pourquoi cela ressort ainsi ?
merci par avance de votre aide.

peut tu afficher ton code ici ca aider un peu plus que des screenshot pour trouver ton erreur !

Tu la mi comment le code comme sa ? :

<span class="bouton" id="bouton_texte" onclick="javascript:afficher_cacher('texte');"></span>  
<div id="texte" class="texte"><?php 
// appel à la base de donnée  
// if ($result) {  
echo "<table id=\"offre\">";  
// boucle while {  

echo "<tr id=row_".$id.">"; // ligne pour la suppression  
echo "<td>Contenu</td>";  
echo "<td><a class=\"supprimer\" href=\"javascript:supprimer(".$id.")\" alt=\"Supprimer\" title=\"Supprimer\">Supprimer</a></td>"; // lien pour supprimer  
echo "<a class=\"ouvrir\" href=\"#ouvrir\" style=\"cursor: pointer;\" alt=\"Détails\" title=\"Détails\">Détails</a>"; // lien pour afficher le contenu de la ligne suivante  
echo "</tr>";  
echo "<tr id=view_".$id.">"; // ligne pour afficher le contenu si ligne précédente existe  
echo "<td colspan=2><div id=view><span class=\"myClass\" style=display:none;>";  
echo "Contenu";  
echo "<p><a class=\"masquer\" href=\"#masquer\">Fermer</a></p></span></div></td>";  
echo "</tr>";  
}  
echo "</table>";  
} 
?>
</div>  
<script type="text/javascript">  
//<!--  
afficher_cacher('texte');  
//-->  
</script>

Sinon plus simple tu peux faire ça :

echo "<ul>
<li><a href='#' id='1' class='Affiche'>Contenu 1</a></div>
<li style="display:none; "><a href='#' id='2' class='Affiche'>Contenu 2</a></div>
<li style="display:none; "><a href='#' id='3' class='Affiche'>Contenu 3</a></div>
<li style="display:none; "><a href='#' id='4' class='Affiche'>Contenu 4</a></div>
</ul>";

$('a.Affiche').click(function(){
            $('.Affiche').hide('slow');
            $('#' + $(this).val()).show('slow');
        });