Voilà je viens de retomber sur un truc que j'avais bidouillé il-y-a quelques temps.
Je l'ai dépoussiéré et mis à jour
Comme je ne sais pas trop quoi en faire et que j'ai vois souvent des topics avec la question "Comment faire des select qui change en fonction de l'option choisi dans le Select précédent ? "
Je mets à dispo :
C'est en 3 script :
_ La page HTML
_ La Script Ajax
_ Le Script PHP
Il faudra également ajouter JQuery sur la racine. http://jquery.com/
Index.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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 <HTML> <HEAD> <script language="javascript" type="text/javascript" src="jquery-1.4.2.min.js"></script> <!--Très important que le framework soit avant les scripts lui faisant référence--> <script language="javascript" type="text/javascript" src="MesAjaxFonction.js"></script> </HEAD> <BODY> <DIV ID="MessageJS"> <span>Ce navigateur ne prends pas en charge JAVASCRIPT.</span> </div> <DIV Id="Page" style="display:none;"> <!--Si le Javascript n'est pas pris en charge le Message informe et la page reste cachée--> <!--Il n'est pas obligatoire de déclarer les balises SELECT dans un DIV. C'est juste afin de pouvoir les "Styler" avec un CSS --> <DIV ID="select_1" style="float:left; margin-right:5px;" > <select class="Groupe" size="1"> <option value="0">Sélectionner ...</option> <option value="1">Groupe 1</option> <option value="2">Groupe 2</option> <option value="3">Groupe 3</option> <option value="4">Groupe 4</option> <option value="5">Groupe 5</option> <option value="6">Groupe 6</option> <option value="7">Groupe 7</option> <option value="8">Groupe 8</option> <option value="9">Groupe 9</option> <option value="10">Groupe 10</option> </select> </DIV> <DIV ID="select_2"style="float:left; margin-right:5px;" > <select class="SousGroupe" size="1"> </select> </DIV> <DIV ID="select_3" style="float:left; margin-right:5px;"> <select class="SousSousGroupe" size="1"> </select> </DIV> <DIV ID="resultat"> </DIV> </DIV> </BODY> </HTML>
MesAjaxFonction.js
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
47
48
49
50
51
52
53
54
55 $(function(){ $("#MessageJS").empty(); //Efface le message qui affiche que le navigateur ne prends pas en charge JAVASCRIPT. $("#Page").show();// Si le JavaScript Fonction on affiche la page. $("select").change(function () {//Action lors d'une selection sur les boites dates ChangeOption(this); }); }); function ChangeOption(Balise){ var OptionChoisi= $(Balise).val(), // On récupère la valeur de l'option ClassBalise = $(Balise).attr("class"),// on récupère le nom de la class affecté au SELECT pour la suite de l'inter-action IDBalise = $(Balise).attr("id") parametres = 'actionPOST='+IDBalise+'&IdSelectParent='+OptionChoisi, //déclare les parametres pour la fonction AJAX. url = './RetourPHP.php'; // L'URL du Script fournissant le retour. if (OptionChoisi != 0){ // Je ne traite pas le ELSE à vous d'adapter en fonction de vos besoins. $.ajax({ type: "POST", // Requete POST url: url, dataType: "html", // Format du retour de l'url success : AfficheSuccess, // Si tout marche bien data: parametres, error: AfficheErreur // Si on se plante ;o) }) } //Afin de pouvoir exploiter les variables de l'objet déclencheur nous déclarons la function de succès à l'interrieur de la fonction d'événement. function AfficheSuccess(retourSuccess){ switch (ClassBalise) { // on change la façon de réagir en fonction de l'élément déclencheur. case 'Groupe' : $('#resultat').empty(); $('select.SousGroupe').empty(); $('select.SousSousGroupe').empty(); $('select.SousGroupe').append( retourSuccess ); break; case 'SousGroupe' : $('#resultat').empty(); $('select.SousSousGroupe').empty(); $('select.SousSousGroupe').append( retourSuccess ); break; case 'SousSousGroupe' : $('#resultat').empty(); $('#resultat').append( $("select.Groupe").val()+' '+ $("select.SousGroupe").val()+' '+ $("select.SousSousGroupe").val() ); break; } } } function AfficheErreur(retourErreur){ $('#MessageJS').append( retourErreur ); }
RetourPHP.php
Code php : 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 <?php if(isSet($_REQUEST['actionPOST'])){ retourSelectFormaté(); } function retourSelectFormaté(){ $IdSelectParent = $_POST['IdSelectParent']; echo ' <option value="0">Selectionner ...</option> <option value="'.$IdSelectParent.'_1">Sous-Groupe '.$IdSelectParent.'1</option> <option value="'.$IdSelectParent.'_2">Sous-Groupe '.$IdSelectParent.'2</option> <option value="'.$IdSelectParent.'_3">Sous-Groupe '.$IdSelectParent.'3</option> <option value="'.$IdSelectParent.'_4">Sous-Groupe '.$IdSelectParent.'4</option> <option value="'.$IdSelectParent.'_5">Sous-Groupe '.$IdSelectParent.'5</option> <option value="'.$IdSelectParent.'_6">Sous-Groupe '.$IdSelectParent.'6</option> <option value="'.$IdSelectParent.'_7">Sous-Groupe '.$IdSelectParent.'7</option> <option value="'.$IdSelectParent.'_8">Sous-Groupe '.$IdSelectParent.'8</option> <option value="'.$IdSelectParent.'_9">Sous-Groupe '.$IdSelectParent.'9</option> <option value="'.$IdSelectParent.'_10">Sous-Groupe '.$IdSelectParent.'10</option> '; } ?>
Si cela pollue le forum ou qu'il faut procéder autrement je suis preneur d'info.
Partager