IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[PHP-JS] Génération d'une sous liste déroulante


Sujet :

Langage PHP

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 254
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<select name=".$nom_select." class=".$classe." onChange='Choix(this.form)'>";
    Je le remplacerais par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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)

Discussions similaires

  1. [PHP 4.4.2] Récupérer les paramètres d'une fonction
    Par stailer dans le forum Langage
    Réponses: 5
    Dernier message: 07/04/2006, 21h41
  2. Réponses: 4
    Dernier message: 04/04/2006, 16h09
  3. [MySQL] réaliser une sous requete en php
    Par SENCABOY dans le forum PHP & Base de données
    Réponses: 22
    Dernier message: 14/02/2006, 20h19
  4. Réponses: 2
    Dernier message: 02/12/2005, 21h21
  5. Réponses: 1
    Dernier message: 02/12/2005, 20h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo