Gérer des checkboxes - cocher et décocher automatiquement

[Résolu]
Signaler
Messages postés
21
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
4 décembre 2008
-
Messages postés
21
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
4 décembre 2008
-
Salut à Tous!!

Un petit problème! comme d'hab'! J'espère que vous pourrez m'aider!!!

En fait, j'ai une liste de modules que des étudiants doivent sélectionner grâce à une checkbox. Le problème est que certains modules nécessitent l'apprentissage d'un autre module en même temps! Par exemple, si vous voulez prendre le module Géométrie, il faudra prendre le module Maths! Mais il vous est possible de prendre le module Maths sans prendre le module Géométrie! (j'espère que vous avez compris!)
Donc pour gérer ce problème de co-modules, avec une fonction javascript, si je clique sur Géométrie, Maths se coche automatiquement! Mais je n'arrive pas à faire le contraire, c'est à dire au moment au je décoche Maths (en supposant que Géométrie soit coché préalablement), Géométrie doit se décocher!!

Voici le code que j'ai utilisé pour gérer le clique sur Géométrie :  (Cette fonction marche!)
function check_comod(fils,pere){
    if(document.getElementById(fils).checked){
        document.getElementById(pere).checked=true;
    }else{
        document.getElementById(pere).checked=false;
    }
}
Voici le code j'ai utilisé pour gérer le "décochage" de Géométrie lorsqu'on clique sur Mathématiques : (Cette fonction ne marche pas! Peut-être des interférences avec la fonction check_comod ???)function uncheck(dad,son){
    if(document.getElementById(dad).checked==false){
        document.getElementById(son).checked=false;
    }
}
J'avais pensais de désactiver la checkbox de maths lorsque Géométrie est coché! Tout ça grâce à un disabled mais la valeur d'une checkbox disabled  n'est pas récupérée lors d'un submit en PHP! Hors, j'en ai besoin pour savoir quels modules ont été cochés!
Donc si quelqu'un pouvait m'aider SVP! Javascript ou PHP! Peu importe, tant que ça marche!!!! Merci!

"C'est quand on a raison qu'il est difficile de prouver qu'on n'a pas tort." de Pierre Dac

28 réponses

Messages postés
21
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
4 décembre 2008

BONNE NOUVELLE!!! J'ai trouvé la réponse moi même! enfin, faut dire que vous m'avez un peu orienté un peu!!!

Donc en fait le problème, c'est que j'avais dans la liste des enfants à décocher que je parcourais dans une boucle FOR, certaines checkboxes n'étaient pas définies, donc ma boucle FOR s'arrêtaient lorsque elle rencontrait une checkbox inexistante. Car en fait, dans ma liste d'enfants à décocher, j'en affiche plus que prévu, à cause de ma requête sql!
Donc, pour passer les checkboxes dont l'id est inexistant dans le formulaire, il faut vérifier la condition suivant (en rouge) :

function checkLink(_id1, _id2){
    if(_id2!=''){
        var tableau=_id2.split('_');
        for (var i=0; i<tableau.length; i++) {
            if(document.getElementById(tableau[i]) != null){
                if(document.getElementById(_id1).checked==true) document.getElementById(tableau[i]).checked=true;
            }
        }
    }
}
function casB(_id1, _id2){
    if (!document.getElementById(_id1).checked){
        var tableau=_id2.split('_');
        for (var i=0; i<tableau.length; i++) {
            if(document.getElementById(tableau[i]) != null){
            document.getElementById(tableau[i]).checked = false;
            }
        }
    }
}

Cela ne provoque donc plus l'arrêt de la boucle, et parcourt toute la liste des enfants! de même pour les parents!!

Voilà, vu que j'ai posté et résolu le problème, on pourrait quasiment dire que je viens de poster un tuto (avec la participation de Zobibol & Bultez!)

Problème Résolu! J'espère que ça aidera certains! Allez, ciao!
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
Bonjour,

    tu dois cocher/décocher l'autre en fonction de l'un ?
    pas tout saisi....
       mais ch'tiot exemple, que tu devrais pouvoir adapter....

<script>
    function coche(em,re)
    {    document.getElementById(re).checked=em.checked;
    }
</script>

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
je viens ( un peu ! ) de percuter !
tu dois vouloir faire l'inverse ? non ?
    donc : document.getElementById(re).checked=!em.checked;
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Messages postés
469
Date d'inscription
mercredi 9 janvier 2002
Statut
Membre
Dernière intervention
20 février 2017
6
Bonjour, en m'appuyant sur ce qu'a fait Bultez (t'inquiète je pèse pas lourds )
j'ai obtenu ça :
    function coche(em,re)
    {    document.getElementById(re).checked=em.checked;
    }
    function checkMath(em, re){
            if ( !em.checked){
                document.getElementById(re).checked = false;
            }
    }
        </script>
       
            <label >géometrie</label>
       
            <label >Math</label>
On coche géométrie, ça coche math
on décoche math, ça décoche géométrie...

[o-_-o]
Messages postés
21
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
4 décembre 2008

Salut à toi Bultez! Merci d'avoir fait aussi vite!

En fait pour géométrie, si je le coche, mathématiques doit se cocher automatiquement! Et si je décoche géométrie maths doit se décocher! Mais ça, pour le moment je sais faire!
Ce que je n'arrive pas à faire c'est ça :
Si géométrie et maths sont cochés et je souhaite décocher maths, il faudra que géométrie se décoche en même temps car tu ne peux pas apprendre la géométrie si tu ne fais pas de maths en même temps!

"C'est quand on a raison qu'il est difficile de prouver qu'on n'a pas tort." de Pierre Dac
Messages postés
21
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
4 décembre 2008

Attendez, je vais tester ce que vous m'avez donné!!
Messages postés
21
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
4 décembre 2008

Désolé les gars ça ne marche toujours pas!!! je pense que ça doit être dû à des interférences entre les fonctions!

Parce qu'en fait, pour le cas de la géographie et des maths ça fonctionne! mais la géométrie et les maths ça marche pas!!!!

(NB: pour apprendre la géographie, tu dois apprendre les maths! comme pour la géométrie!!!)

Je sais, peut-être que vous connaissez un autre moyen qu'une fonction javascript??? en PHP, ça me semble difficile!! et après, mes compétences en langage info se limite à ça! Dsl!
Messages postés
469
Date d'inscription
mercredi 9 janvier 2002
Statut
Membre
Dernière intervention
20 février 2017
6
En même temps, ça fait longtemps que j'ai appris les maths ;o)

 function coche(em,re)
    {  
            if (em.checked){
                document.getElementById(re).checked=true;
            }
    }
    function checkMath(em, re){
            if ( !em.checked){
                document.getElementById(re).checked = false;
            }
    }
        </script>
       
            <label >géometrie</label>
       
            <label >Math</label>

et cela irait-il ?

[o-_-o]
Messages postés
21
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
4 décembre 2008

lol! nan mais ce sont pas les vrais noms!! C'est juste que les noms de modules sont des chiffres et des lettres donc c'est plus facile de résonner avec maths et géométrie! lol! C'est pour des gars de master quand ça!! lol

bon j'essaye je te dis quoi!
Messages postés
21
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
4 décembre 2008

Désolé de te dire ça Zobibol, mais ton code ne marche pas du tout! mon premier code marchait mieux! sauf que des fois, il plantait!

dans ton code, ce qui ne va pas c'est ça :
if ( ! document.getElementById(em).checked){
                document.getElementById(re).checked = false;
 }
Messages postés
469
Date d'inscription
mercredi 9 janvier 2002
Statut
Membre
Dernière intervention
20 février 2017
6
j'ai beau relire mon code (5fois), j'ai pas trouvé la ligne
if ( ! document.getElementById(em).checked){
                document.getElementById(re).checked = false;
 }

????

[o-_-o]
Messages postés
21
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
4 décembre 2008

Voilà :



    function coche(em,re)
    {    document.getElementById(re).checked=em.checked;
    }
    function checkMath(em, re){
            if ( !em.checked){
                document.getElementById(re).checked = false;
            }
    }

>>>>>
function coche(em,re) {
        document.getElementById(re).checked=em.checked;
      }
      function checkMath(em, re){
               if ( !
document.getElementById(
em).checked){
                    document.getElementById(re).checked = false;
               }
      }




       
Messages postés
21
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
4 décembre 2008

Ouais bon ce truc commence à m'énerver donc j'ai essayé de trouver un autre moyen! Désolé je peux pas encore l'expliquer pour le moment car c'est assez compliqué! Si vous voulez je vous l'expliquerai quand il sera fini (si il fonctionne!!!)

Donc maintenant j'aurais besoin de savoir quel est l'évènement qui permet de faire agir une fonction javascript lorsqu'un champs de type hidden est modifié! Mais attention la valeur de ce champs est modifiée par une autre fonction javascript! La modification ne se fait pas à la main (normal, le champs est caché! comment voulez-vous le modifier?)

Je sais qu'il existe onChange mais ça ne fonctionne pas! ???

Merci de votre aide...
Messages postés
21
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
4 décembre 2008

Bon, dsl si je réponds pas a vos messages tout de suite! je re tout à l'heure! mais si vous avez des réponses à ma question, n'hésitez pas! a tout'!
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
normalement ut as tout pour faire....
on tourne autour, mais on ne saisit ( enfin moi ! ) ce que tu veux...
peut-on expliquer simplement ?

2 chekbox "A1" et "B2"

si on coche A1 que fait-on ?   si on décoche A1 : que fait-on ? 
    et curieusement, j'ai les mêmes questions pour B2 :
si on coche B2 que fait-on ?   si on décoche B2 : que fait-on ? 

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Messages postés
21
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
4 décembre 2008

Re Bultez!!!

Donc si tu coches A1, B1 doit se cocher automatiquement.
    Si tu décoches A1, B1 doit se décocher automatiquement.

Ensuite, pour B2:
Si tu coches B2, rien ne se passe sur A1 (si A1 était coché, il reste coché; s'il était décoché, il reste décoché!)
Si tu décoches B2, A1 est automatiquement décoché! (si A1 n'était pas coché, rien ne se passe alors!) >>> Etape que je n'arrive pas à faire!

Voilà, j'espère que c'est plus clair! Merci de m'aider!
Messages postés
21
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
4 décembre 2008

Excusez-moi, pour mon dernier post, B1 et B2 sont les mêmes, c'est juste un erreur de frappe!
Voici la version corrigée si vous voulez:

Donc si tu coches A1, B2 doit se cocher automatiquement.
    Si tu décoches A1, B2 doit se décocher automatiquement.

Ensuite, pour B2:
Si tu coches B2, rien ne se passe sur A1 (si A1 était coché, il reste coché; s'il était décoché, il reste décoché!)
Si tu décoches B2, A1 est automatiquement décoché! (si A1 n'était pas coché, rien ne se passe alors!) >>> Etape que je n'arrive pas à faire!

Voilà, j'espère que c'est plus clair! Merci de m'aider!
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
    <script>
        function casA(em,re)
        //si tu coches A1, B1 doit se cocher automatiquement.
        //Si tu décoches A1, B1 doit se décocher automatiquement.
        {    document.getElementById(re).checked=em.checked;    }
        function casB(em,re)
        //si tu coches B2, rien ne se passe sur A1
        //Si tu décoches B2, A1 est automatiquement décoché!       
        {    if ( !em.checked )
            {    document.getElementById(re).checked=false;    }
        }
    </script>
    A1
    B2

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Messages postés
469
Date d'inscription
mercredi 9 janvier 2002
Statut
Membre
Dernière intervention
20 février 2017
6
ça ressemble fortement à ce que j'avais mis dans mon message de 13:16:15, mais il semblerait que ce soit pas ça, s'il était possible de décocher (à ce propos) tous les messages acceptés, histoire de voir ou l'on en est, parce que la, actuellement, il y a 1200 réponses acceptées et ça ne marche toujours pas !

[o-_-o]
Messages postés
21
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
4 décembre 2008

oups dsl pour les réponses acceptées!!! c'est moi! je croyais que ça voulais dire qu'on avait lu le msg!! j'vais les enlever!! (j'suis nouveau sur codessources!! dsl)
Bultez, j'essaie ton code!