IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Affichage avec la fonction "modal" dans un tableau


Sujet :

JavaScript

  1. #1
    Membre éclairé Avatar de Bayard
    Inscrit en
    juin 2002
    Messages
    797
    Détails du profil
    Informations forums :
    Inscription : juin 2002
    Messages : 797
    Points : 661
    Points
    661
    Par défaut Affichage avec la fonction "modal" dans un tableau
    Bonjour,

    J'implémente la fonction modal : https://www.w3schools.com/howto/tryi...how_css_modal2
    et cela fonctionne trés bien. Lorsque je clique sur le bouton: j'obtient une sorte de popup. J'affiche:
    Modal Header
    Some text in the Modal Body

    Some other text...

    Modal Footer



    Par contre, si je met les balises correspondante dans un tableau où je positionne deux boutons, en prenant le soin de modifier les id
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id="myBtn2"        var btn = document.getElementById("myBtn2");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id="myModal2"        var btn = document.getElementById("myModal2");
    alors, je ne parviens pas à voir le bon message.

    En cliquant sur le premier bouton, j'ai le texte du second bouton.

    Avez-vous une idée s'il vous plaît ?

    Cela me parait assez simple et cela fait plusieurs heures que je cherche.
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    <!DOCTYPE html>
    <html>
    <head>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
    body {font-family: Arial, Helvetica, sans-serif;}
    /* The Modal (background) */
    .modal {
      display: none; /* Hidden by default */
      position: fixed; /* Stay in place */
      z-index: 1; /* Sit on top */
      padding-top: 100px; /* Location of the box */
      left: 0;
      top: 0;
      width: 100%; /* Full width */
      height: 100%; /* Full height */
      overflow: auto; /* Enable scroll if needed */
      background-color: rgb(0,0,0); /* Fallback color */
      background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
    }
    /* Modal Content */
    .modal-content {
      position: relative;
      background-color: #fefefe;
      margin: auto;
      padding: 0;
      border: 1px solid #888;
      width: 80%;
      box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19);
      -webkit-animation-name: animatetop;
      -webkit-animation-duration: 0.4s;
      animation-name: animatetop;
      animation-duration: 0.4s
    }
    /* Add Animation */
    @-webkit-keyframes animatetop {
      from {top:-300px; opacity:0}
      to {top:0; opacity:1}
    }
    @keyframes animatetop {
      from {top:-300px; opacity:0}
      to {top:0; opacity:1}
    }
    /* The Close Button */
    .close {
      color: white;
      float: right;
      font-size: 28px;
      font-weight: bold;
    }
    .close:hover,
    .close:focus {
      color: #000;
      text-decoration: none;
      cursor: pointer;
    }
    .modal-header {
      padding: 2px 16px;
      background-color: #5cb85c;
      color: white;
    }
    .modal-body {padding: 2px 16px;}
    .modal-footer {
      padding: 2px 16px;
      background-color: #5cb85c;
      color: white;
    }
    </style>
    </head>
    <body>
    <h2>Animated Modal with Header and Footer</h2>
    <table style="width:100%">
        <tr>
          <th>Firstname</th>
          <th>Lastname</th>
          <th>Age</th>
        </tr>
        <tr>
          <td>
    <!-- Trigger/Open The Modal -->
    <button id="myBtn">Open Modal</button>
    <!-- The Modal -->
    <div id="myModal" class="modal">
      <!-- Modal content -->
      <div class="modal-content">
        <div class="modal-header">
          <span class="close">&times;</span>
          <h2>Modal Header</h2>
        </div>
        <div class="modal-body">
          <p>Some text in the Modal Body</p>
          <p>Some other text...</p>
        </div>
        <div class="modal-footer">
          <h3>Modal Footer</h3>
        </div>
      </div>
    </div>
    <script>
    // Get the modal
    var modal = document.getElementById("myModal");
    // Get the button that opens the modal
    var btn = document.getElementById("myBtn");
    // Get the <span> element that closes the modal
    var span = document.getElementsByClassName("close")[0];
    // When the user clicks the button, open the modal
    btn.onclick = function() {
      modal.style.display = "block";
    }
    // When the user clicks on <span> (x), close the modal
    span.onclick = function() {
      modal.style.display = "none";
    }
    // When the user clicks anywhere outside of the modal, close it
    window.onclick = function(event) {
      if (event.target == modal) {
        modal.style.display = "none";
      }
    }
    </script>
            Jill</td>
    <td>
    <!-- Trigger/Open The Modal -->
    <button id="myBtn2">Open Modal</button>
    <!-- The Modal -->
    <div id="myModal2" class="modal">
      <!-- Modal content -->
      <div class="modal-content">
        <div class="modal-header">
          <span class="close">&times;</span>
          <h2>Modal Header</h2>
        </div>
        <div class="modal-body">
          <p>Another story</p>
          <p>Hello World...</p>
        </div>
        <div class="modal-footer">
          <h3>Modal Footer</h3>
        </div>
      </div>
    </div>
    <script>
    // Get the modal
    var modal = document.getElementById("myModal2");
    // Get the button that opens the modal
    var btn = document.getElementById("myBtn2");
    // Get the <span> element that closes the modal
    var span = document.getElementsByClassName("close")[0];
    // When the user clicks the button, open the modal
    btn.onclick = function() {
      modal.style.display = "block";
    }
    // When the user clicks on <span> (x), close the modal
    span.onclick = function() {
      modal.style.display = "none";
    }
    // When the user clicks anywhere outside of the modal, close it
    window.onclick = function(event) {
      if (event.target == modal) {
        modal.style.display = "none";
      }
    }
    </script>
            Smith</td>
          <td>50</td>
        </tr>
        <tr>
          <td>Eve</td>
          <td>Jackson</td>
          <td>94</td>
        </tr>
      </table>
    </body>
    </html>
    Si tu ne vis pas ce que tu penses alors tu penses ce que tu vis.

  2. #2
    Modérateur
    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    janvier 2011
    Messages
    15 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : janvier 2011
    Messages : 15 453
    Points : 38 545
    Points
    38 545
    Par défaut
    Bonjour,
    tout d'abord j'ai inséré ton code directement entre des balises [CODE=html]/* ton code */[/CODE] pour plus de lisibilité.

    Concernant ton soucis, tu redéclares tes mêmes variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // Get the modal
    var modal = document.getElementById("myModal");
    // Get the button that opens the modal
    var btn = document.getElementById("myBtn");
    // Get the <span> element that closes the modal
    var span = document.getElementsByClassName("close")[0];
    et plus loin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // Get the modal
    var modal = document.getElementById("myModal2");
    // Get the button that opens the modal
    var btn = document.getElementById("myBtn2");
    // Get the <span> element that closes the modal
    var span = document.getElementsByClassName("close")[0];
    seules les dernières déclarées survivront écrasant les premières.

  3. #3
    Membre expert Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2012
    Messages
    1 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2012
    Messages : 1 862
    Points : 3 508
    Points
    3 508
    Par défaut
    Bonjour,

    Comme NoSmoking t'avais expliqué, puis je pense que tu peux faire ce truc avec une seule fenêtre modal :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    <table>
    <tr>
        <td><button id="btn1" onclick='modal(this)'>Open Modal</button></td>
        <td><button id="btn2" onclick='modal(this)'>Open Modal</button></td>
    </tr>
    </table>
     
    <!-- The Modal -->
    <div id="myModal" class="modal">
     
      <!-- Modal content -->
      <div class="modal-content">
        <div class="modal-header">
          <span class="close">&times;</span>
          <h2>Modal Header</h2>
        </div>
        <div class="modal-body">
          <p>Some text in the Modal Body</p>
          <p>Some other text...</p>
        </div>
        <div class="modal-footer">
          <h3>Modal Footer</h3>
        </div>
      </div>
     
    </div>

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    function modal(bouton){
        var modal = document.getElementById("myModal");
     
        // When the user clicks the button, open the modal 
        modal.style.display = "block";
     
        // Get the button that opens the modal
        var btn = document.getElementById(bouton.id);
        let text='id :'+bouton.id;
     
        console.log('<p> dans .modal-body :', modal.querySelector('.modal-body').children);
        let p=document.querySelector('.modal-body').children;
     
        p[0].textContent=text;//seulement pour différencier le texte...
     
        // Get the <span> element that closes the modal
        var span = document.getElementsByClassName("close")[0];
     
        // When the user clicks on <span> (x), close the modal
        span.onclick = function() {
          modal.style.display = "none";
        }
     
        // When the user clicks anywhere outside of the modal, close it
        window.onclick = function(event) {
          if (event.target == modal) {
            modal.style.display = "none";
          }
        }
    }

  4. #4
    Membre éclairé Avatar de Bayard
    Inscrit en
    juin 2002
    Messages
    797
    Détails du profil
    Informations forums :
    Inscription : juin 2002
    Messages : 797
    Points : 661
    Points
    661
    Par défaut
    Pour Toufik83 je ne comprends pas comment on différencie les données affichées depuis le bouton 1 de celles du bouton 2.
    Si tu ne vis pas ce que tu penses alors tu penses ce que tu vis.

  5. #5
    Membre expert Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2012
    Messages
    1 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2012
    Messages : 1 862
    Points : 3 508
    Points
    3 508
    Par défaut
    Bonjour,

    Citation Envoyé par Bayard Voir le message
    Pour Toufik83 je ne comprends pas comment on différencie les données affichées depuis le bouton 1 de celles du bouton 2.
    C'est seulement une ligne qui permet de modifier dynamiquement le texte du premier <p> de .modal-body en fonction de l'id du bouton cliqué.

    Tu n'es pas obligé de l'utiliser sinon..

  6. #6
    Modérateur
    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    janvier 2011
    Messages
    15 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : janvier 2011
    Messages : 15 453
    Points : 38 545
    Points
    38 545
    Par défaut
    Je voyais une solution plus générique, à savoir, et ce à partir de la structure HTML suivante :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <button class="modal-btn">Open Modal</button>
    <div class="modal">
      <div class="modal-content">
        <div class="modal-header">
          <span class="modal-close">&times;</span>
          <h2>Modal Header</h2>
        </div>
        <div class="modal-body">
          <p>Some text in the Modal Body</p>
          <p>Some other text...</p>
        </div>
        <div class="modal-footer">
          <h3>Modal Footer</h3>
        </div>
      </div>
    </div>
    donnerait le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    // pour ouverture de modales
    const oBtns = document.querySelectorAll(".modal-btn");
    oBtns.forEach((btn) => {
      btn.addEventListener("click", () => {
        const modalBox = btn.nextElementSibling;
        modalBox.style.display = "block";
      });
    });
    // pour fermeture des modales
    const oSpans = document.querySelectorAll(".modal-close");
    oSpans.forEach((span) => {
      span.addEventListener("click", () => {
        const modalBox = span.closest(".modal");
        modalBox.style.display = "none";
      });
    });
    // pour clic outside
    window.addEventListener("click", (e) => {
      const elemClicked = e.target;
      if (elemClicked.classList.contains("modal")) {
        elemClicked.style.display = "none";
      }
    });
    avec ce code, tu peux ajouter autant de modales que tu veux il n'est pas à modifier si tu respectes la structure HTML.

  7. #7
    Membre éclairé Avatar de Bayard
    Inscrit en
    juin 2002
    Messages
    797
    Détails du profil
    Informations forums :
    Inscription : juin 2002
    Messages : 797
    Points : 661
    Points
    661
    Par défaut
    J'ai essayé, mais en dupliquant les variables pour que cela fonctionne avec le second bouton, j'ai :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <button class="modal-btn2">Open Modal</button>
    <div class="modal">
      <div class="modal-content">
        <div class="modal-header">
          <span class="modal-close2">&times;</span>
          <h2>Modal Header</h2>
        </div>
        <div class="modal-body">
          <p>Some text in the Modal Body</p>
          <p>Some other text...</p>
        </div>
        <div class="modal-footer">
          <h3>Modal Footer</h3>
        </div>
      </div>
    </div>
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <script>
    // pour ouverture de modales
    const oBtns = document.querySelectorAll(".modal-btn2");
    oBtns.forEach((btn) => {
      btn.addEventListener("click", () => {
        const modalBox = btn.nextElementSibling;
        modalBox.style.display = "block";
      });
    });
    // pour fermeture des modales
    const oSpans = document.querySelectorAll(".modal-close2");
    oSpans.forEach((span) => {
      span.addEventListener("click", () => {
        const modalBox = span.closest(".modal");
        modalBox.style.display = "none";
      });
    });
    // pour clic outside
    window.addEventListener("click", (e) => {
      const elemClicked = e.target;
      if (elemClicked.classList.contains("modal")) {
        elemClicked.style.display = "none";
      }
    });
    </script>
    et là, le second bouton ne s'ouvre pas.

    Je met le fichier complet en attaché.
    Fichiers attachés Fichiers attachés
    Si tu ne vis pas ce que tu penses alors tu penses ce que tu vis.

  8. #8
    Modérateur
    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    janvier 2011
    Messages
    15 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : janvier 2011
    Messages : 15 453
    Points : 38 545
    Points
    38 545
    Par défaut
    J'ai essayé, mais en dupliquant les variables pour que cela fonctionne avec le second bouton
    tu n'as visiblement pas compris le principe mis en place !

    Le code que je t'ai fourni doit être unique dans ta page et il traite tous les éléments liés aux « modales » et ce quelque soit leur nombre.

    Tous les éléments des ces « modales » doivent avoir la même classe à savoir :
    • <button class="modal-btn">Open Modal</button> ;
    • <div class="modal">...</div> ;
    • <span class="modal-close">&times;</span>.

    pour pouvoir être récupérés simplement via les document.querySelectorAll(nomDeLaClasse).

    De plus regarde la console du navigateur, touche F12, tu dois avoir des erreurs compte tenu de l'utilisation des mots clé const pour la déclaration des variables.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'affichage avec la fonction paint
    Par Fleur du Pays dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 11/02/2011, 20h33
  2. Réponses: 35
    Dernier message: 25/11/2010, 17h20
  3. Problème d'affichage avec rich:modal et session timeOut
    Par anthony22 dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 24/11/2010, 15h44
  4. Réponses: 6
    Dernier message: 19/10/2004, 13h46
  5. Problème d'affichage avec trace
    Par WriteLN dans le forum Flash
    Réponses: 10
    Dernier message: 22/10/2003, 16h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo