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 :

Checkbox select all dans un tableau


Sujet :

JavaScript

  1. #1
    Membre averti
    Femme Profil pro
    Ergonome
    Inscrit en
    Août 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Août 2014
    Messages : 52
    Par défaut Checkbox select all dans un tableau
    Hello

    J'ai plusieurs tableaux qui sont affichées par une boucle.
    Dans ces tableaux j'ai ajouté des inputs checkbox pour pouvoir sélectionner toutes les lignes et des checkbox pour chacune des lignes.
    J'ai réussi à faire des choses : les éléments se mettent bien dans mon array et les cases sont bien checked ou non checked comme il faut.
    Problème : lorsque je clique par exemple sur mes deux premiers checkbox de mes deux premieres lignes et qu'ensuite je clique sur l'input pour tout sélectionner => la sélection s'inverse. C'est à dire qu'au lieu d'avoir 1, 2, 3, 4, 5, 6 par exemple j'ai 3, 4, 5, 6 puisque les 1, 2 sont supprimés.
    C'est logique vu mon code, mais je ne vois pas comment faire pour me dépétrer de tout ça maintenant .. je m'y suis sans doute pas forcément bien prise au départ... Une idée pour m'aider ?

    J'utilise Vue JS et AntDesign mais le problème est purement du javascript... Comment faire marcher le SELECT ALL dans le cas de tableaux générés à la volée dynamiquement en gros cela pourrait résumer le souci...

    Merci de votre aide !

    Voici le bout de javascript qui correspond ainsi que le html qui affichent les tableaux :
    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
    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
     data() {
        return {
          listQuestions:[],
          columns,
          selectCheck: [],
        }
      },
     onClickCheckAll(value) { //when click to all chekckbox
          console.log("click")
          console.log(value)
          console.log(value.sousDimensions)
     
          for (var sousdim of value.sousDimensions)
          {
            for (var item of sousdim.questions)
            {
              console.log(this.selectCheck)
     
              const p = this.selectCheck.indexOf(item.id) //looking for index for each item
     
              const checkboxItem = document.querySelector("#choice-" + item.id) //all inputs with id choice-ID and then add or remove "checked" attribute
     
              if (p > -1) { //if still there, delete
                this.selectCheck.splice(p, 1);
     
                if (!item.barometre)
                {
                  checkboxItem.checked=false
                }
     
              }
              else { //if not, adding in array
                this.selectCheck.push(item.id)
                checkboxItem.checked=true
              }
     
            }
          }
        },
     
        onClickOneCheckbox(val) {
     
          const index = this.selectCheck.indexOf(val);
          if (index > -1) //delete item if still in the array
          {
            this.selectCheck.splice(index, 1);
          }
          else
          {
            this.selectCheck.push(val)
          }
     
          console.log(this.selectCheck)
        }

    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
      <div v-for="(dimension, index) in listQuestions" :key="index" :header="`${dimension.name}`">
     
                <table class="table-questions" >
     
                    <thead>
                      <tr>
                        <th><input type="checkbox" @click="onClickCheckAll(dimension)"  /></th>
                        <th>Sous-dimension</th>
                        <th>Item</th>
                      </tr>
                    </thead>
     
                    <tbody v-for="(question,i) in dimension.sousDimensions" >
     
                      <tr v-for="(item, p) in question.questions">
     
                        <!--some questions "barometre" disabled and checked by default-->
                        <td v-if="item.barometre"><input type="checkbox" checked disabled :id="'choice-' + item.id"/></td>
                        <td v-else ><input type="checkbox" @click="onClickOneCheckbox(item.id)"  :id="'choice-' + item.id" /> </td>
                        <td style="width: 40%">{{question.name}}</td>
                        <td >{{item.item}}</td>
     
                      </tr>
     
                    </tbody>
     
                </table>
     
     
              </div>

    Pour plus de facilité : ici mon problème : https://jsfiddle.net/chtouk/rc80ksno/35/

  2. #2
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 486
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 486
    Par défaut
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    check/uncheck [all]<input id="toggleAll" type="checkbox">
    <table border="1">
    <tr>
      <td>check 1<input type="checkbox"></td>
      <td>check 2<input type="checkbox"></td>
      <td>check 3<input type="checkbox"></td>
      <td>check 4<input type="checkbox"></td>
      <td>check 5<input type="checkbox"></td>
    </tr>
    </table>
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    document.getElementById('toggleAll').addEventListener('change', function() {
      document.querySelectorAll('table input[type="checkbox"]').forEach(checkbox => {
        checkbox.checked = this.checked;
      });
    });
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

Discussions similaires

  1. Réponses: 10
    Dernier message: 28/03/2011, 16h01
  2. checkbox pour suppression dans un tableau
    Par badreddine540 dans le forum Struts 1
    Réponses: 1
    Dernier message: 14/08/2008, 15h21
  3. Réponses: 5
    Dernier message: 17/07/2008, 09h18
  4. selection/ copie dans un tableau de workbook
    Par Dereck07 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/03/2008, 19h55
  5. [DDE]selection multiple dans un tableau Excel
    Par NewbiePower dans le forum VBA Access
    Réponses: 9
    Dernier message: 23/03/2007, 13h08

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