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:

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;
	}
L'apel de la fonction mk_select

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>
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

appel de la deuxième box

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>
et le lien avec la bdd en php

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);
	}
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.

Merci d'avance

Djillian