Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/07/2007, 12h43   #1
Invité de passage
 
Inscription : juin 2007
Messages : 1
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1
Points : 0
Points : 0
Par défaut [PHP-JS] Génération d'une sous liste déroulante

Bonjour à tous.

Voilà j'ai un léger petit problème sur lequel je butte depuis un certain temps, étant donné que le Js n'est pas ma tasse de thé.

Je m'explique:

J'ai dans mon formulaire "form" une certaine liste déroulante ou j'ai 10 champs (dont le premier vide).

Je cherche à pouvoir, suivant le champs sélectionné, générer un second "sous menu" déroulant.

Voila mon code php qui génère mon premier menu déroulant:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
function creaListeDeroulante($tabvaleur,$nom_select,$classe,$ancienne_saisie)
{
	echo "<select name=".$nom_select." class=".$classe." onChange='Choix(this.form)'>";
 
	foreach ($tabvaleur as $Indicetab => $mot_liste)
	{
		echo "<option value='".$mot_liste."'";
		if ($ancienne_saisie==$mot_liste) echo " selected";
		echo ">".$mot_liste."</option>";
	}
 
	echo "</select>";
}
Sachant que : $nom_select est entré dans la page php avant de créer la liste déroulante.
$ancienne_saisie est le nom du champs stocké dans ma Bdd
$tab_valeur c'est un fichier Php ou j'ai mit les valeurs des tableaux, sous la forme: $t_nom=array ("champs 1","champs2", ...);

Et le code de la fonction JS que j'ai pour l'instant mais qui est loin d'être complet et c'est la que j'ai mes principaux problèmes (j'entends déjà les rires au loin)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function Choix(form) {
 
	i = form.<? echo $nom_select;?>.selectedIndex; 
	if (i == 0) { return; } switch (i) 
	{ 
		case 1 : var txt = new Array ('sous options du champs 1'); break;
		case 2 : var txt = new Array ('sous options du champs 2'); break;
		case 3 : var txt = new Array ('sous options du champs 3'); break;
               etc...
	}
	form.<? echo $nom_select;?>.selectedIndex = 0; 
	for (i=0;i<9;i++) 
	{ form.Sous_menu.options[i+1].text=txt[i]; } 
}
Sachant que le "Sous_menu" est le sous menu associé au champs selectionné.
J'ai pour l'instant mit un petit menu de test basic (comme on peut le voir dans le switch case),je voudrai déjà reussir à gérer cela avant d'utiliser le même principe d'option que pour le premier menu déroulant.

Bon voilà en gros le problème, c'est assez compliqué à comprendre peut être, je le consoit, mais je suis la pour préciser tous les points qui ont besoin de l'être.

Merci d'avance pour votre aide.
akitosoma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 09h55   #2
Membre confirmé
 
Inscription : avril 2007
Messages : 254
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 254
Points : 262
Points : 262
N'ayant pas tout compris, je risque une proposition de solution patielle inadéquate.
Dans la première fonction, cela me parrait clair et presque juste. Un point devrait, me semble-t-il, être modifié:
Code :
echo "<select name=".$nom_select." class=".$classe." onChange='Choix(this.form)'>";
Je le remplacerais par
Code :
echo "<select name=".$nom_select." class=".$classe." onChange='Choix(this)'>";
Car si je me rappelle bien (corrigez moi si je me trompe), 'this' en l'occurence signifie le select sur lequel on a cliqué. Et donc, 'this.form' n'a pas de sens.
Ce qui permet de changer quelque lignes de la fonction (plus obscure) suivante en:
Code :
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
function Choix(laSelection) 
{
	switch (laSelection.selectedIndex) 
	{ 
		case 0 :
			return;
		break;
		case 1 : 
			var txt = new Array ('sous options du champs 1'); 
		break;
		case 2 : 
			var txt = new Array ('sous options du champs 2'); 
		break;
		case 3 : 
			var txt = new Array ('sous options du champs 3'); 
		break;
               etc...
	}
	laSelection.selectedIndex = 0; 
	var sousMenu = document.getElementById("Sous_menu"); 
	for (i=0;i<9;i++) 
	{ 
		sousMenu.options[i+1].text=txt[i]; 
	} 
}
Il s'entend ici qu'il n'y a qu'un seul sous menu et qu'il a un id="Sous_menu".
Deux points m'interpellent:
- Tu veux remplir un sous menu sur base d'un index dans le menu principal?
Quid si plus tard, quelqu'un rajoute un élément dans la liste des options de la liste principale?
- Les arrays que tu charges dans la variable txt contienent toujours 10 éléments?
Si non: BANG!!!!
Tu peux à moindre frais, écrire:
Code :
for (i=0;i<txt.length;i++)
Selon moi, ces quelques modifications ne donneront pas la solution finale mais peut être (je te le souhaite) t'avanceront dans ton cheminement.
(Attention, je n'ai pas testé, c'est le principe que j'énonce ici)
__________________
Quand un problème a une solution, rien ne sert de s'inquiéter. Quand il n'y a pas de solution, s'inquiéter n'arrange rien.
Ouach est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h47.


 
 
 
 
Partenaires

Hébergement Web