J'ai une page web sur laquelle se trouve plusieurs liste déroulantes dépendantes.
A l'aide d'XML HTTP Request, en choisissant une valeur dans une première liste, j'arrive à remplir la 2nde.
Je voudrais en cliquant sur la 2nde en remplir une 3ème.
J'ai 2 pbs :
* Sous IE6, le clic sur la 2nde liste (modèles) me renvoi la valeur "undefined"
* Sous Firefox, le clic sur la 2nde liste me rempli bien la 3eme liste, mais, si dans la 1ere liste on choisi une valeur (ça rempli la 2nde liste), puis on change la valeur, ça crée des listes imbriquées dans la 2eme liste (modèles).
Si vous avez des idées pour résoudre au moins le pb avec IE6, je vous en serais très reconnaissant car mêmene m'aide pas, ni les tutos trouvés sur developpez.com ...
par avance !
Voici les fichiers :
Page PHP :
Exécute une requete suivant un paramètre, et me renvoi toute la liste déroulante (de <select> à </select>)
Page web affichant les différentes listes
Code JS pour récupérer les valeurs
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 <tr> <td align="center">Marque :</td> <td align="center"> <select name="marque" onchange="javascript:recup_modeles();" id="marque"> <option value="-1"></option> <option value="9">Alfa Roméo</option> <option value="4">Chrysler</option> <option value="2">Citroën</option> <option value="18">Fiat</option> <option value="0">AUTRE</option> </select> </td> <td align="center">Modèle :</td> <td align="center"><div id="modele" style='display:inline'> </div> </td> </tr> <tr> <td align="center">Finition :</td> <td align="center"><div id="finition" style='display:inline'> </div> </td> </tr>
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79 var xhr=null; function getXhr() { if(window.XMLHttpRequest) // Firefox et autres xhr = new XMLHttpRequest(); else if(window.ActiveXObject){ // Internet Explorer try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } } else { // XMLHttpRequest non supporté par le navigateur alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...\r\nVeuillez utilise Internet Explorer 5 ou mieux ... Firefox ! Merci."); xhr = false; } } function recup_modeles() { var marque = document.getElementById("marque"); if (marque.value != -1) { getXhr(); // On défini ce qu'on va faire quand on aura la réponse xhr.onreadystatechange = function() { // On ne fait quelque chose que si on a tout reçu et que le serveur est ok if(xhr.readyState == 4 && xhr.status == 200) { leselect = xhr.responseText; // On se sert de innerHTML pour rajouter les options a la liste document.getElementById('modele').innerHTML = ""; document.getElementById('modele').innerHTML = leselect; } } /* Préparation d'une requête asynchrone de type GET : */ xhr.open("GET", "/xmlhttp.php?marque="+marque.value,true); /* Effectue la requête : */ xhr.send(null); } else { alert("Veuillez choisir une marque dans la liste !"); } } function recup_finitions() { var modele = document.getElementById("modele"); alert (modele.value); if (modele.value != -1) { getXhr(); // On défini ce qu'on va faire quand on aura la réponse xhr.onreadystatechange = function() { // On ne fait quelque chose que si on a tout reçu et que le serveur est ok if(xhr.readyState == 4 && xhr.status == 200) { leselect = xhr.responseText; // On se sert de innerHTML pour rajouter les options a la liste document.getElementById('finition').innerHTML=""; document.getElementById('finition').innerHTML = leselect; } } /* Préparation d'une requête asynchrone de type GET : */ xhr.open("GET", "/xmlhttp.php?modele="+modele.value,true); /* Effectue la requête : */ xhr.send(null); } else { alert("Veuillez choisir une marque dans la liste !"); } }
Partager