Bonjour,
Je vous expose mon problème:
en fait, je n'arrive pas a lié le choix d'une liste déroulante a une autre liste déroulante , les deux etant lié a des données inclus dans une base de données.
Une fonction me gène et je ne la comprend pas, se qui me bloque un peu.
la fonction en question:
L'apel de la fonction mk_select
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 var gs_nth = 0; var gs_timeout = 1600; var gs_select = new Array(); var gs_timer = new Array(); var gs_stor = new Array(); function mk_select(nom,options,flag) { if (flag) { document.write('<SELECT id="gs_select_' + gs_nth + '" name="' + nom + '"' + ' style="width:100%"' + ' onkeydown="return gs_inkey(' + gs_nth + ')">' + options + '</SELECT>' ); gs_select[gs_nth] = null; gs_timer[gs_nth] = null; gs_stor[gs_nth] = ""; ++gs_nth; } else { document.write(options); } } function gs_inkey(nth) { if (gs_select[nth]==null) gs_select[nth] = document.getElementById("gs_select_"+nth); var key = event.keyCode; if (key==32 || (key>=48 && key<=57) || (key>=65 && key<=90)) { if (gs_stor[nth].length<3) { var car = String.fromCharCode(key).toUpperCase(); gs_stor[nth]+=car; gs_search(nth); } if (gs_timer[nth]!=null) clearTimeout(gs_timer[nth]); gs_timer[nth] = setTimeout('gs_stor['+nth+']=""',gs_timeout); return false; } else return true; } function gs_search(nth) { var mem=[-1,-1,-1]; var nb = gs_select[nth].length; for (var ith=0; ith<nb; ++ith) { var label = gs_select[nth][ith].innerHTML.toUpperCase(); if (gs_stor[nth].substr(0,1)==label.substr(0,1) && mem[0]==-1) mem[0]=ith; if (gs_stor[nth].substr(0,2)==label.substr(0,2) && mem[1]==-1) mem[1]=ith; if (gs_stor[nth].substr(0,3)==label.substr(0,3) && mem[2]==-1) mem[2]=ith; } if (mem[2]>=0) index=mem[2]; else if (mem[1]>=0) index=mem[1]; else if (mem[0]>=0) index=mem[0]; gs_select[nth].selectedIndex = index; }
Jusque la pas de problème , mais lorsque j'essaye de faire intéragir la deuxième box avec la prmière, je me retrouve avec le choix complet des noms, au lieu de n'avoir que ceux qu'il faudrait :s
Code : Sélectionner tout - Visualiser dans une fenêtre à part <TD width=150><SPAN class="hide_selection"><SCRIPT language="javascript">mk_select("serv_service[{ligne}]","{serv_service}",1)</SCRIPT></SPAN></TD>
appel de la deuxième box
et le lien avec la bdd en php
Code : Sélectionner tout - Visualiser dans une fenêtre à part <TD width=150><SPAN class="hide_selection"><SCRIPT language="javascript">mk_select("serv_nom[{ligne}]","{serv_service}",1)</SCRIPT></SPAN></TD>
Je suis conscient qu'il y'a beaucoup de code, mais ayant chercher pas mal de temp plusieurs solution dont aucune n'a eté efficace ( meme un tutoriel :s), je m'en remet a vous qui m'avait permis de résoudre mes deux précédents problémes.
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 /*** Produire la table des services ***/ $max_numero = dernierNumero($courrier); foreach($courrier["attrib"] as $idx=>$serv) if (!isset($serv["delete"]) && $serv["vu"]) { $t->set_var(array( "ligne" => $idx, "serv_service" => $dt->selection("libelle",$liste_services,$serv["service"]), "serv_nom" => $dt->selection("nom",$liste_nom,$serv["service"]), "serv_motif" => $dt->selection("libelle",$liste_motifs,$serv["motif"]), "serv_observ" => $serv["observ"], "serv_dest" => $serv["dest"] ? "checked" : "", "serv_copie" => $serv["copie"] ? "checked" : "", "serv_date_transmis" => $serv["date_transmis"], "serv_date_retour" => $serv["date_retour"], "serv_numero" => $serv["numero"], "max_numero" => $max_numero, )); $t->parse("serv_table","services",true); }
Merci d'avance
Djillian
Partager