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

Résolu
TheArrow Messages postés 21 Date d'inscription mercredi 16 avril 2008 Statut Membre Dernière intervention 4 décembre 2008 - 21 mai 2008 à 12:35
TheArrow Messages postés 21 Date d'inscription mercredi 16 avril 2008 Statut Membre Dernière intervention 4 décembre 2008 - 21 mai 2008 à 20:59
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

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
21 mai 2008 à 16:08
>>

ça ressemble fortement à ce que j'avais mis dans mon message
    je n'avais pas lu ta solution zobibol !
    je suis sûr que ce que tu proposais fonctionnait,
       mais je pensais que notre demandeur n'avait pas tout
       à fait exprimé correctement sa demande.

c'est vrai que "réponse acceptée" devrait se nommer "question résolue".

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
TheArrow Messages postés 21 Date d'inscription mercredi 16 avril 2008 Statut Membre Dernière intervention 4 décembre 2008
21 mai 2008 à 16:30
Je crois avoir compris d'où vient le problème!

en fait, dans mon code, il y a A1, B1 et C1.


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


Si tu coches C1, B2 doit se cocher automatiquement.
Si tu décoches C1, B2 doit se décocher automatiquement.







Ensuite, pour B2:
Si tu coches B2, rien ne se passe sur A1 et C1
Si tu décoches B2, A1 et C1 sont automatiquement décoché! (si A1 et C1 n'étaient pas cochés, rien ne se passe alors!)




Ce qui signifie que dans le code, ça me donne un trucs dans ce genre :

<input type='checkbox' id='B1' onClick=

"casB('B1','A1');casB('B1,'C1');">




Et comme il y a deux actions à la suite, il ne m'exécute pas la deuxième action >>>



casB('B1,'C1')

par contre,

casB('B1','A1') est exécuté!

sauriez vous comment faire exécuter les 2 actions??
0
TheArrow Messages postés 21 Date d'inscription mercredi 16 avril 2008 Statut Membre Dernière intervention 4 décembre 2008
21 mai 2008 à 16:32
Je crois avoir compris d'où vient le problème!

en fait, dans mon code, il y a A1, B1 et C1.




Désolé, j'me suis encore trompé dans les numéros... Voilà la version corrigée





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


Si tu coches C1, B1 doit se cocher automatiquement.
Si tu décoches C1, B1 doit se décocher automatiquement.







Ensuite, pour B1:
Si tu coches B1, rien ne se passe sur A1 et C1
Si tu décoches B1, A1 et C1 sont automatiquement décoché! (si A1 et C1 n'étaient pas cochés, rien ne se passe alors!)




Ce qui signifie que dans le code, ça me donne un trucs dans ce genre :

<input type='checkbox' id='B1' onClick=

"casB('B1','A1');casB('B1,'C1');">




Et comme il y a deux actions à la suite, il ne m'exécute pas la deuxième action >>>



casB('B1,'C1')

par contre,

casB('B1','A1') est exécuté!

sauriez vous comment faire exécuter les 2 actions??
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
21 mai 2008 à 16:41
avec mon exemple et celui de zobibol aisni que ces explications ...
        tu as tout ce qu'il faut.      tu devrais faire un tout ch'tiot effort...
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
21 mai 2008 à 16:42
il fallait lire "celui de zobibol ainsi que ses explications"<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
Zobibol Messages postés 469 Date d'inscription mercredi 9 janvier 2002 Statut Membre Dernière intervention 20 février 2017 6
21 mai 2008 à 17:00
Bon sang de bois, je crois que j'ai trouvé ou alors j'ai encore perdu le neurone qui me permets de respirer (non, je respire encore, donc c'est bon)
   /**
* Fonction utiliser pour le cas A1 et C1
* @param _id1 identifiant de la case maître
* @param _id2 identifiant de la case esclave
* @param _id3 identifiant de la case esclave qui va foutre le boxon
*/
function checkLink(_id1, _id2, _id3){
        if ( !document.getElementById(_id3).checked)
        document.getElementById(_id2).checked = document.getElementById(_id1).checked
}

/**
* Fonction utiliser pour le cas B1
* @param _id1 identifiant de la case maître
* @param _id2 identifiant de la case esclave 1
* @param _id3 identifiant de la case esclave 2
*/
function casB(_id1, _id2, _id3){
    if (!document.getElementById(_id1).checked){
       document.getElementById(_id2).checked =false;
       document.getElementById(_id3).checked =false;
    }
}
        </script>
<label> B1 </label>
<label> A1 </label>
<label> C1 </label>

Alors ???????
0
TheArrow Messages postés 21 Date d'inscription mercredi 16 avril 2008 Statut Membre Dernière intervention 4 décembre 2008
21 mai 2008 à 17:53
Re Zobibol!


je ne comprends pas ce que c'est cet id3??  >>>   * @param _id3 identifiant de la case esclave qui va foutre le boxon
Que signifie @param???

NB: Et j'ai oublié de préciser quelquechose! j'utilise php pour ajouter les "esclaves"!! alors il peut bien y avoir 0 esclave comme 5 esclaves! Cela dépendra combien on en a rentré dans la base de données!!
0
TheArrow Messages postés 21 Date d'inscription mercredi 16 avril 2008 Statut Membre Dernière intervention 4 décembre 2008
21 mai 2008 à 20:09
Donc voilà ce que j'ai réussi a faire pour l'instant! normalement ça devrait gérer le fait qu'il y ait X enfants et X parents mais ça ne fonctionne pas! je ne sais pas encore pourquoi! peut-être et surment une erreur dans le javascript! :S
NB : après réflexion, il n'est pas nécessaire de décocher B1 si on décoche A1 ou C1. Mais par contre il est impératif que A1 et C1 soient décochés si on décoche B1!

JAVASCRIPT:
function checkLink(_id1, _id2){
    if(_id2!=''){
        var tableau=_id2.split('_');      //on découpe le second paramètre pour récupérer les identifiants des checkboxes à cocher (ici, on cherche à cocher B1)
        for (var i=0; i<tableau.length; i++) {
            if(tableau[i]!=''){
                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('_');    //on découpe le second paramètre pour récupérer les identifiants des checkboxes à décocher (ici, on cherche à décocher A1 et C1)
        for (var i=0; i<tableau.length; i++) {
            if(tableau[i]!='') document.getElementById(tableau[i]).checked = false;
        }
    }
}

PAGE PHP:
       while($arr=mysql_fetch_array($req)){
              
                    //liste des enfants à décocher sur déclique d'un parent (=selection de C1 et A1)
                    $check_child='';
                    $req_child=mysql_query("SELECT id_child FROM famille WHERE id_parent='{$arr['id_courant]}'") or die(mysql_error());
                    while($arr_child=mysql_fetch_array($req_child)){
                        $check_child=$check_child.'_'.$arr_child['id_child'];
                    }
               
                   //liste des parents à cocher sur clique d'un enfant (=selection de B1)
                    $check_parent='';
                    $req_parent=mysql_query("SELECT id_parent FROM famille WHERE id_child='{$arr['id_courant']}'") or die(mysql_error());
                    while($arr_parent=mysql_fetch_array($req_parent)){
                        $check_parent=$check_parent."_".$arr_parent['id_parent'];
                    }
                    if($check_parent!='') $check_parent=substr($check_parent,1);  //pour supprimer le premier '_'
                    if($check_child!='') $check_child=substr($check_child,1);    //pour supprimer le premier '_'
                ?>   
                  '  id='<?php echo $arr['id_courant']; ?>' onClick="javascript:<?php echo "checkLink('".$arr['id_courant']."','".$check_child."');casB('".$arr['id_courant']."','".$check_parent."');"; ?>" >

        }

Merci à ceux qui pourront m'aider!!! je sais, j'ai du mal à expliquer le problème!! et à expliquer où pourrait être le problème!!
0
Rejoignez-nous