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 :

Traitement des cases à cocher par lot


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 592
    Points : 813
    Points
    813
    Par défaut Traitement des cases à cocher par lot
    Bonjour,
    J'ai 3 groupes de cases à cocher chk[]. Pour chacun des groupes j'ai une case à cocher chkAll qui force à cocher toutes les cases à cocher de son groupe et lorsqu'elle est décochée vide toutes les cases de ce groupe. Si une case quelconque du groupe est décochée, la case chkAll est automatiquement décochée.
    Maintenant, je voudrais que si toutes les cases du groupe sont cochées la case chkAll soit automatiquement cochée mais je ne vois pas comment faire.
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    const
    	chkAll	= document.querySelectorAll("[name*='chkAll']")
    	,chk	= document.querySelectorAll("[name*='chk']")
    	;
    var sum = [];
     
    if(chkAll.length){
    	chkAll.forEach(function(curChk, index){
    		curChk.addEventListener('change', function(e){
    			switch(e.target.value){
    				case 'customers':
    					for(let i=0; i<13; i++){
    						chk[i].checked = curChk.checked;
    					}
    				break;
    				case 'infos':
    					for(let i=14; i<18; i++){
    						chk[i].checked = curChk.checked;
    					}
    				break;
    				case 'employees':
    					for(let i=19; i<28; i++){
    						chk[i].checked = curChk.checked;
    					}
    				break;
    			}
    		}, false );
    	});
    }
     
    if(chk.length){
    	chk.forEach(function(curChk, index){
    		curChk.addEventListener('change', function(e){
    			let n;
    			if(index<13)
    				n=0;
    			else if(index>18)
    				n=2;
    			else
    				n=1;
    			if(curChk.checked == false){
    				chkAll[n].checked = false;
    			}
    		}, false );
    	});
    }
    Extrait du code HTML
    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
    		<fieldset><legend>Données du fichier adresses</legend>
    			<label><input type="checkbox" name="chk[]" value="c.id"><span>Identifiant client</span></label><br>
    			<label><input type="checkbox" name="chk[]" value="c.company_name"><span>Société cliente</span></label><br>
    			<label><input type="checkbox" name="chk[]" value="c.company_fullname"><span>Complément</span></label><br>
    			<p>
    				<label><input type="checkbox" name="chkAll" value="customers"><span>Sélectionner tout le cadre</span></label><br>
    			</p>
    		</fieldset>
    			<fieldset><legend>Données du fichier interlocuteurs</legend>
    				<label><input type="checkbox" name="chk[]" value="e.gender"><span>Civilité</span></label><br>
    				<label><input type="checkbox" name="chk[]" value="e.title"><span>Titre</span></label><br>
    				<label><input type="checkbox" name="chk[]" value="e.firstname"><span>Prénom</span></label><br>
    			<p>
    				<label><input type="checkbox" name="chkAll" value="employees"><span>Sélectionner tout le cadre</span></label><br>
    			</p>
    			</fieldset>

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 592
    Points : 813
    Points
    813
    Par défaut
    Pour tenter de répondre au problème, j'essaie de compter les cases cochées mais ça ne marche pas. La variable sum reste indéfiniment à 0.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    sum = 0;
    for(let i=0; i<13; i++){
    	if(chk[i].checked == true)
    		sum++;
    	console.log(sum);
    }

  3. #3
    Expert éminent sénior

    Avatar de -Nikopol-
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2013
    Messages
    2 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 2 174
    Points : 11 289
    Points
    11 289
    Billets dans le blog
    5
    Par défaut
    Je préfère identifier les éléments avec des classes ou des ids, c'est plus lisible et ça évite comme dans ton cas que les inputs de chaque groupe soient liés au groupe suivant
    Pour ton dernier problème je pense que c'est parce que tu ne dois pas mettre ce code dans l'écouteur d'évènement donc il est évalué au départ et pas lors du changement.
    Voici une solution :
    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
    <!DOCTYPE html>
    <html lang="">
     
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title></title>
        <link rel="stylesheet" href="">
    </head>
     
    <body>
        <fieldset>
            <legend>Données du fichier adresses</legend>
            <label><input class="address" type="checkbox" name="chk[]" value="c.id"><span>Identifiant client</span></label><br>
            <label><input class="address" type="checkbox" name="chk[]" value="c.company_name"><span>Société cliente</span></label><br>
            <label><input class="address" type="checkbox" name="chk[]" value="c.company_fullname"><span>Complément</span></label><br>
            <p>
                <label><input id="address-master" type="checkbox" name="chkAll" value="customers"><span>Sélectionner tout le cadre</span></label><br>
            </p>
        </fieldset>
        <fieldset>
            <legend>Données du fichier interlocuteurs</legend>
            <label><input class="inter" type="checkbox" name="chk[]" value="e.gender"><span>Civilité</span></label><br>
            <label><input class="inter" type="checkbox" name="chk[]" value="e.title"><span>Titre</span></label><br>
            <label><input class="inter" type="checkbox" name="chk[]" value="e.firstname"><span>Prénom</span></label><br>
            <p>
                <label><input id="inter-master" type="checkbox" name="chkAll" value="employees"><span>Sélectionner tout le cadre</span></label><br>
            </p>
        </fieldset>
        <script>
            const addressChkBox = document.querySelectorAll('.address');
            const nb_checkbox_address = addressChkBox.length //nombre de checkboxes pour l'adresse
            const interChkBox = document.querySelectorAll('.inter');
            const nb_checkbox_inter = interChkBox.length
            const addressMaster = document.querySelector('#address-master');
            const interMaster = document.querySelector('#inter-master');
     
            addressMaster.addEventListener('change', () => {
                isMasterChecked = event.target.checked;
                addressChkBox.forEach(e => {
                    e.checked = isMasterChecked
                })
            })
     
            addressChkBox.forEach(add => {
                add.addEventListener('change', () => {
                    const nb_checkboxes_checked = document.querySelectorAll('.address:checked').length
                    addressMaster.checked = nb_checkboxes_checked === nb_checkbox_address //equivalent au code suivant, on affecte le resultat du test, si toutes les cases sont ccochées alors true donc case cochée sinon false pas cochée
                    //                if(nb_checkboxes_checked === nb_checkbox_address) {
                    //                    addressMaster.checked = true;
                    //                } else {
                    //                    addressMaster.checked = false;
                    //                }
                })
            })
     
            interMaster.addEventListener('change', () => {
                isMasterChecked = event.target.checked;
                interChkBox.forEach(e => {
                    e.checked = isMasterChecked
                })
            })
     
            interChkBox.forEach(add => {
                add.addEventListener('change', () => {
                    const nb_checkboxes_checked = document.querySelectorAll('.inter:checked').length
                    interMaster.checked = nb_checkboxes_checked === nb_checkbox_inter
     
                })
            })
     
        </script>
    </body>
    </html>

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 592
    Points : 813
    Points
    813
    Par défaut
    J'ai repris mon code en retravaillant les paramètres de mes querySelectorAll() (ma solution). J'ai mis le code qui ne l'était pas dans l'écouteur et tout fonctionne impeccable. Merci!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/05/2020, 19h09
  2. Réponses: 1
    Dernier message: 09/07/2018, 18h26
  3. Réponses: 2
    Dernier message: 22/08/2014, 09h11
  4. [AC-2010] Liste déroulante influencé par des cases à cocher
    Par xChristianex dans le forum Access
    Réponses: 4
    Dernier message: 25/07/2011, 16h06
  5. [MySQL] Selectionner des cases à cocher puis envoyer par e-mail
    Par antxbe dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 21/10/2008, 12h03

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