Afficher table en php après onclick js

210657
,

Bonjour,

Je souhaite afficher les données d'une table apres avoir la fonction onlick en JS.
Enfaite j'ai un svg avec des zones cliquable (path avec id), lorque je clique sur une zone le nom de la zone s'affiche avec l'id du span.
Je souhaite afficher des données d'une table qui correspond a l'id de la zone selectionnées.
Je me demande si c'est possible de faire ça sans ajax ou xmlhttprequest si pas le choix avec, mais je n'est pas de formulaire.
Le tout est sur la meme page.
pour info j'integre le svg avec include.

Voici une partie du html et php

<!-- Reservations -->
        <div id="reservations" class="tab-pane active">
            <!-- début svg -->
            <div class="alveoles">  
                <?php include ('Resa/plan_alveoles.svg'); ?>
            </div>
            <!-- finsvg -->
            <!-- popover -->
            <div class="infos">
                <span id="infoAlveole"></span><br>
                <td><?php echo $compteresa->nombre?>Réservations</td>
                <?php while($listinscrit = $stmt->fetch(PDO::FETCH_OBJ)) {?>
                    <td><?php echo $listinscrit->nom;  echo $listinscrit->prenom;?></td>
                <?php } ?>
            </div>
            <div id="buttonResa">
                <button title="Séléctionner alvéole" class="btn btn-info " type="button" onclick="resaAlveole();">Séléctionner</button><br><br>
            </div>
        </div>

Voici un partie du JS:

<script>
        $(function selectAlv(){
            $('[id*=alveole_').on('click', function(){          
                let alveole = $(this);
                let alveoleId = $(this)["0"].id;            
                let allAlveole = $('[id*=alveole_');            

            allAlveole.css('fill','#1e1e1e');
            alveole.css('fill', '#f5c6cb');

            alveoleId = alveoleId.replace('_',' ');
            $('#infoAlveole').text(alveoleId);          
            console.log(alveoleId);
        });
        })
    </script>

Voici une patie su svg pour l'exemple d'une zone path:

               <path
             style="opacity:1;fill:#1e1e1e;fill-opacity:1;stroke:#ffffff;stroke-width:16.19797516;stroke-linejoin:bevel;stroke-miterlimit:4;stroke- dasharray:none;stroke-opacity:0.76530612;paint-order:markers fill stroke"
             d="m 236.51177,767.7956 -9.49196,-3.99108 9.91094,-17.88509 c 5.45101,-9.83683 42.75516,-78.95654 82.89812,-153.5994 
             40.14295,-74.64286 92.77877,-172.35714 116.96848,-217.14286 l 43.9813,-81.42857 9.81069,0.85254 c 5.39588,0.46889 52.23926,6.62224 
             104.0964,13.67409 51.85715,7.05186 105.85703,14.16811 119.99977,15.81389 14.14272,1.64579 26.26052,3.5388 26.9284,4.20671 
             0.66792,0.66791 -9.30265,96.86764 -22.1568,213.7772 -12.85414,116.90954 -22.58437,214.6132 -21.62274,217.1192 1.56409,4.07589 
             -4.21923,4.55637 -54.84274,4.55637 -51.3556,0 -246.53008,3.75786 -354.07546,6.81729 -32.55282,0.92605 -45.20391,0.25714 
             -52.4044,-2.77029 z m 228.17397,-25.47557 c -1.95625,-2.35714 -4.0019,-4.28571 -4.54588,-4.28571 -0.54399,0 -0.249,1.92857 
             0.65552,4.28571 0.90452,2.35714 2.95017,4.28571 4.54589,4.28571 1.6723,0 1.39461,-1.81545 -0.65553,-4.28571 z m 104.1534,-150.99014 c 
             10.34649,-64.21569 12.17472,-90.43843 6.30523,-90.43843 -5.74543,0 -10.47377,12.8369 -11.95934,32.46826 -0.72969,9.64246 
             -2.76417,27.47649 -4.52106,39.63118 -1.75688,12.1547 -2.45508,24.02587 -1.55157,26.38042 2.65191,6.91077 10.14557,1.77211 
             11.72674,-8.04143 z"
             id="alveole_1"
             inkscape:connector-curvature="0"
             transform="matrix(0.26458333,0,0,0.26458333,-246.99989,87.365326)"
             inkscape:label="#path4696" />

Merci d'avance.

4 Réponse

Default
,

si tu veux pas d'ajax, tu peux préparer les tables dans des div avec display = none
puis sur le clic, tu affiches le div qui va bien

210657
,

Hello et merci c'est une bonne idée.

Voici ceque j'ai fait:
Par contre je ne sais pas comment je peux faire disparaitre la div affichée apres click, lorsque je click sur une autre div, du coup je me retrouve avec plusieurs div affichée, mais je veux que seul la div cliqué apparaisse la div précedente clique disparaisse.

la partie JS:

$(function selectAlv(){
$('[id*=alveole_').on('click', function(){          
let alveole = $(this);  
let alveoleId = $(this)["0"].id;
let allAlveole = $('[id*=alveole_');

let alveoleAll = $('.infoalv*');
let alveole1 = $('.infoalv1');
let alveole2 = $('.infoalv2');
let alveole3 = $('.infoalv3');
let alveole4 = $('.infoalv4');
let alveole5 = $('.infoalv5');



alveoleId = alveoleId.replace('_',' ');
// alveoleId = alveoleId.toUpperCase();

$('#infoAlveole').text(alveoleId);

if (alveoleId == 'alveole 1') {
    allAlveole.css('fill','#1e1e1e');
    allAlveole.css('stroke', '#ffffff');
    alveole.css('fill', '#f5c6cb');
    alveole.css('stroke', '#000');
    alveole1.removeClass("infoalv1");

    alveole2.addClass("infoalv2");
    alveole3.addClass("infoalv3");
    alveole4.addClass("infoalv4");
    alveole5.addClass("infoalv5");
} 

if (alveoleId == 'alveole 2') {

    allAlveole.css('fill','#1e1e1e');
    allAlveole.css('stroke', '#ffffff');
    alveole.css('fill', '#ffeeba');
    alveole.css('stroke', '#000');
    alveole2.removeClass("infoalv2");

    alveole1.addClass("infoalv1");
    alveole3.addClass("infoalv3");
    alveole4.addClass("infoalv4");
    alveole5.addClass("infoalv5");

La partie html

<div id="showresa1"class="infoalv1 infoalv1bull1">
le php est ici

et la partie css

          .infoalv1{
      display: none;
  }

  .infoalv1bull1{
      background:rgb(245, 198, 203);
      color:#000;
      padding:7px 15px;
      border-radius:5px;
      max-width:500px;
      list-style: url('/images/Icon_header2.ico');
      margin: 0 auto;
  }

  .infoalv1bull1::after{
      content:""; 
      border-left:20px solid transparent;
      border-right:20px solid transparent;
      border-top: 20px solid rgb(245, 198, 203);
      position: absolute;
  }

  /*alveole2*/

  .infoalv2{
      display: none;
  }

  .infoalv1bull2{
      background:#ffeeba;
      color:#000;
      padding:7px 15px;
      border-radius:5px;
      max-width:500px;
      list-style: url('/images/Icon_header2.ico');
      margin: 0 auto;
  }

  .infoalv1bull2::after{
      content:""; 
      border-left:20px solid transparent;
      border-right:20px solid transparent;
      border-top: 20px solid #ffeeba;
      position: absolute;
  }

Merci.

Default
,

je vois que tu utilises jquery.
Il y a des méthodes show() et hide(), ainsi que toggle() qui peuvent te simplifier la vie.

<div id="alveole1" class="alveole">
</div>
<div id="alveole2" class="alveole">
</div>

$('.alveole').click(function() {
$('.alveole').each(function() {$(this).hide();});
$(this).show();
});


210657
,

Hello lolo,
ça fonctionne merci.