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

JavaScript Discussion :

[DOM] listes déroulantes dynamiques et passage de paramètres


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9
    Points : 3
    Points
    3
    Par défaut [DOM] listes déroulantes dynamiques et passage de paramètres
    bonjour,
    voilà qq heures que je me casse la tête et pas de réponse sur le net.
    J'ai 2 listes déroulantes liées: Lorsque je fais une sélection dans la 1ere, la seconde se met à jour automatiquement à partir d'une base de données.
    Quand je valide le formulaire (le problème est le même en post ou en get), sur la page suivante je récupère sans problème la value de ma 1ere liste mais pas de la seconde ! J'imagine que c'est pacqu'elle est construite dynamiquement ?
    J'ai même essayé de stocker dans un champ hidden mais rien à faire...
    Sous ie ça marche mais pas sous firefox :-(
    la fonction javascipt appelée sur onchange de la liste:
    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
     
    ...
    var xhr = 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("bloc"+liste_cible).innerHTML = leselect;
    		}
    	}
     
    	// Ici on va voir comment faire du post
    	xhr.open("POST",fichier,true);
    	// ne pas oublier ça pour le post
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	// ne pas oublier de poster les arguments
    	sel = document.getElementById(liste_source);
    	id_liste_source = sel.options[sel.selectedIndex].value;
    	xhr.send(id_lien+"="+id_liste_source+next_arg);
    le code qui se cache derrière la variable fichier ci dessus:
    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
    include ('../param.inc');
     
    	$commune=$_POST["c_commune"];$id_periode=$_POST["id_periode"];
    	echo "<select class='txt_menu_der' name='list_etab' id='list_etab' onchange=\"stock_station('blocsta_hidden','sta_hidden',this.value)\">";
    	//echo "<select class='txt_menu_der' name='list_etab' id='list_etab' onchange=\"alert('oo')\">";
     
    	if(isset($_POST["c_commune"])){
    		$dbconn = pg_connect("host=$host dbname=$dbname user=$user password=$password")
    					or die('Connexion impossible : ' . pg_last_error());
    		$query = "SELECT distinct l_station, site_ref_station.id_station FROM site_ref_station, site_ref_type_arret, site_ref_ligne_station where id_periode='".$id_periode."' and site_ref_ligne_station.id_station = site_ref_station.id_station and site_ref_station.c_type = site_ref_type_arret.c_type and l_type in ('Etablissement Scolaire', 'Arrêt scolaire') and c_commune='".$commune."' and l_ar = 'aller'";
    		$result = pg_query($dbconn, $query) or die('Échec requête : ' . pg_last_error());
     
    		if(pg_num_rows($result) == 0)
    		{
    			echo "<option value='-1'>Aucun établissement trouvé !</option>\n";
    		}else
    		{
    			echo "<option value='-1'>Sélectionnez un établissement</option>\n";
    			while ($line = pg_fetch_row($result)) {
    				$l_rue = str_replace("'", "#",$line[0]);
    				echo "<option value='".$line[1]."'>".$line[0]."</option>\n";
    			}
    		}
    		pg_free_result($result);
    		pg_close($dbconn);
    	}
    	echo "</select>";
    le //echo "<select class='txt_menu_der' name='list_etab' id='list_etab' onchange=\"alert('oo')\">"; quand il est décommenté m'alerte bien. La liste se remplie bien mais impossible de récupérer la valeur

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    A tu trouvé le problème?

    Est ce que tu utilise l'url rewriting?

    Fait un print_r($_POST) ou print_r($_GET) sur ta seconde page pour voir ce qui se passe.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9
    Points : 3
    Points
    3
    Par défaut suite
    j'ai laissé tombé car trop d'heures passées et j'ai fais un truc pas très beau mais qui marche: un innerhtml m'a permis de construire un formulaire dynamiquement avec tout mes paramètres avec un document.form.submit() le tout en javascript et c'eest passé. Mais bon j'aimerai bien savoir si des personnes ont réussi à faire ce que je veux faire sous firefox (passer en paramètre une valeur de liste déroulante qui a été chargée dynamiquement APRES la page)
    Merci

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    En effet mettre un select dans une page en utilisant innerHTML ne plait pas beaucoup au DOM... En particulier sous IE qui ne reconnait pas les names des éléments ainsi bricolés.

    Pour faire les choses correctement il faut différentier les navigateurs pour créer les elements avec le DOM. Ainsi le retour d'ajax ne devra pas être le code html; mais les éléments permettant de construire avec le DOM les éléments.

    J'ai proposé un petit script qui permet de construire asse facilement des elements de formulaires proprement:
    http://www.developpez.net/forums/d53...ynamique-form/


    sinon tu peux toujour essayer de mettre la balise select sur la page avec son name et ne ne remplir QUE les options...
    Je n'ai jamais testé, mais du coup il prendra en compte le name du select, il reste juste à vérifier qu'il reconnaisse les options que tu aura injectée's en innerHTML
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9
    Points : 3
    Points
    3
    Par défaut suite
    merci pour la réponse.
    Sur un autre script j'ai rééssayé pour voir ..
    même procédé: un innerhtml m'injecte un champ de type hidden avec la donnée provenant d'une requête sql.
    juste derrière je récupère le contenu de ce hidden et rien ! enfin presque rien !
    alert('un'+document.getElementById("vraifaux").value);
    alert('de'+document.getElementById("vraifaux").value );
    ces 2 lignes bout à bout me renvoie 2 résultats différents !!

    Normalement c'est du séquentiel non ? je ne comprends pas, c'est comme si il commençait à exécuter du code avant d'avoir fini le précedent

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    c'est comme si il commençait à exécuter du code avant d'avoir fini le précedent
    Ben oui c'est ce qu'il fait
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9
    Points : 3
    Points
    3
    Par défaut oui
    oui évidemment mais la question sous entendue est: pourquoi ?
    Dans 1 langage procédural, quand on a 2 instructions successives, il n'y a pas de raison que la seconde soit réalisée avant la première ...

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    javascript fonctionne en bulle et n'attend pas systématiqueemnt qu'une instruction ou fonction soit terminée pour interprétée la suivante ...
    c'est comme ça, il faut faire avec ...
    et coder des delais ou des tests de réalisation ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

Discussions similaires

  1. récupérer la valeur d'une liste déroulante dynamique
    Par grinder59 dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 23/01/2006, 17h51
  2. Liste déroulante dynamique
    Par Screw16 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/10/2005, 20h37
  3. [HTML] liste déroulante dynamique
    Par lacousinee dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 04/08/2005, 20h51
  4. Liste déroulante dynamique ?
    Par Regis.C dans le forum Composants
    Réponses: 5
    Dernier message: 29/06/2005, 12h09
  5. [FORMULAIRE] Liste déroulante dynamique
    Par bchristo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/01/2005, 10h07

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