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 :

[AJAX] listes liés qui ne marchent pas sous Mozilla


Sujet :

JavaScript

  1. #1
    Membre chevronné Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Points : 2 232
    Points
    2 232
    Par défaut [AJAX] listes liés qui ne marchent pas sous Mozilla
    Bonjour à tous

    Voila ce que j'essaye de faire : une liste de pays alimentée par une base de donnée. Une fois le pays choisit une liste de région de ce pays s'affiche. Cette liste est également alimentée par la base de donnée.
    Certain pays n'ont pas de région la 2eme liste ne doit donc pas s'afficher. La page se trouve à cette adresse .
    Sous IE tout se passe bien, mais sous Mozilla ça marche mal.
    Voila le code de la partie ajax
    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
     
    if(isset($_POST["action"])){
    		if ($_POST["action"]=="inscription_famille")
    		{
    			if(isset($_POST["id_pays"])){
     
    				$SELECT="SELECT id_region, nom_region_key FROM region WHERE id_pays=".$_POST["id_pays"];
    				$sql_interpreteur_ajax->executer_requete($SELECT);
    				$text="";
    				if ($sql_interpreteur_ajax->nombre_reponses()>0){
    					$text.="<select name='region' id='region' onChange='gestionDepartement();'>";
    					$text.='<option value="-1">'.texte_traduit('global_choisissez',true).'</option>';
    					while($data_ajax = $sql_interpreteur_ajax->fetch_array())
    					{
    						$text.= "<option value='".$data_ajax["id_region"]."'>".getRegion($data_ajax["nom_region_key"],true)."</option>";
    					}
    					$text.= "</select>";
     
    				}else
    				{
    					$text="";
    				}
    				echo $text;
    			}
    		}
    }
    La fonction javascript
    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
     
    function gestionRegion(){
    				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
     
    						if (leselect.length>1){
    							document.getElementById('region').innerHTML = leselect;
    							document.getElementById('intitule_region').innerHTML =" <?php texte_traduit("forms_label_region"); ?>" ;
    						}
    						else{
    							document.getElementById('intitule_region').innerHTML ="";
    							document.getElementById('region').innerHTML = "";
    						}
     					}
    				}
    				// Ici on va voir comment faire du post
    				xhr.open("POST","ajax_utils/gestionRegion.php",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('pays');
    				idpays = sel.options[sel.selectedIndex].value;
    				xhr.send("id_pays="+idpays+"&action=inscription_famille");
    			}
    Merci d'avance pour votre aide

  2. #2
    Membre confirmé Avatar de d-Rek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2007
    Messages : 438
    Points : 455
    Points
    455
    Par défaut
    Chez moi ça passe.
    Je vois juste ton alert(document.getElementById('region').innerHTML);

    Pour ton problème de charset et les accents qui passent pas, configure ta base de donnée en UTF-8

  3. #3
    Membre chevronné Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Points : 2 232
    Points
    2 232
    Par défaut
    J'avais avancé depuis ton message le problème ce passe lorsque l'on choisit un pays puis un autre pays (exemple tu choisit Afrique du Sud puis Algérie). Mozilla affiche la liste des régions du 2ème pays à l'intérieur de la première liste.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 19
    Points : 19
    Points
    19
    Par défaut 2 balises id=region
    Bonjour,

    Ton id nomer region devrait être unique, tu as un div id=region en dessous de la liste des pays et aussi ta liste des régions avec ce même id.
    Cela pourrait être la cause de ton imbrication de listes.

  5. #5
    Membre chevronné Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Points : 2 232
    Points
    2 232
    Par défaut suppression du lien
    Malheureusement ce n'est pas ça. J'ai rajouté des alerts dans ma fonction javascript qui donne des résultat plus qu'étonnant
    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
     
    function gestionRegion(){
    	var xhr = getXhr();
    	// On défini ce qu'on va faire quand on aura la réponse
    	xhr.onreadystatechange = function(){
    	if(xhr.readyState == 4 && xhr.status == 200){
    		leselect = xhr.responseText;
                    alert("resultat |"+leselect+"| ");
    		if (leselect.length>1){
    			document.getElementById('region').innerHTML = leselect;
    			document.getElementById('intitule_region').innerHTML ="<?php texte_traduit("forms_label_region"); ?>" ;
    		}
    		else{
    			document.getElementById('intitule_region').innerHTML ="";
    			document.getElementById('region').innerHTML = "";
    		}
     	}
            alert("div : |"+document.getElementById('region').innerHTML+"|");
    	xhr.open("POST","ajax_utils/gestionRegion.php",true);
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	sel = document.getElementById('pays');
    	idpays = sel.options[sel.selectedIndex].value;
    	xhr.send("id_pays="+idpays+"&action=inscription_famille");
    }
    sous IE les 2 alerts sont identiques (normal j'attribue à un div le contenu d'une variable) de la forme ("<select ...><option>......</option></select>"). Mais sous Mozilla queand j'affiche le contenu de mon div je n'ai que les balise <option> le <select> et le </select> on disparu. Je ne vois vraiement pas pourquoi.
    Vous pouvez voir un exemple plus simple à cet endroit

    Merci d'avance pour votre aide

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 60
    Points : 61
    Points
    61
    Par défaut
    Salut. Je pense que jejetcr avait raison lorsqu'il a dit que tu avais plusieurs éléments avec le même id.

    J'ai regardé et essayé ton nouveau lien (http://www.bedycasa.com/fr/page_vide.php), lorsque l'on choisit un pays dans la première liste qui contient une sous liste, on se retrouve avec deux select (logique!) qui sont d'id respectivement "pays" et "region". Or le div qui contient le nouveau select porte aussi l'id "region", cf la source suivante de ta page :

    Code php : 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
     
        <select name="pays" id="pays" onchange="go();">
        <option value="-1">Choisissez...</option>
     
    	<option value="1">Afganistan</option>
    <option value="2">Afrique du Sud</option>
    <option value="3">Albanie</option>
    <option value="4">Algérie</option>
    ...
    <option value="210">Yémen</option>
    <option value="211">Zambie</option>
    <option value="212">Zimbabwe</option>
    			</select>
     
     
    	<br>
    	<div id="region"><select name="region" id="region"><option value="-1">Choisissez...</option><option value="198">Eastern Cape</option><option value="199">Free State</option><option value="200">Gauteng</option><option value="201">Eastern Cape</option><option value="202">Free State</option><option value="203">Gauteng</option><option value="204">Eastern Cape</option><option value="205">Free State</option><option value="206">Gauteng</option><option value="207">KwaZulu-Natal</option><option value="208">Limpopo</option><option value="209">Mpumalanga</option><option value="210">Northern Cape</option><option value="211">North West</option><option value="212">Western Cape</option></select></div>

    C'est là que le mal est fait, pour la bonne raison qu'au prochain changement de pays (qu'il ai des régions ou non) le contenu sera inséré dans le dernier élément d'id "region" trouvé dans la page, c'est à dire le <select id="region"...> et non pas le <div id="region"...>

    Si tu veux corriger ton problème, il va falloir changer l'id de ton div, soit celui du select créer via ajax.

    Ainsi tu peux attribuer à ton div l'id "region_genere", en modifiant la fonction gestionRegion en conséquant, c'est à dire remplacer les occurences de region par region_genere dans les getElementById. Pour ce qui est de la fonction getsionDepartement, pas besoin de faire de modification car il me semble que le onChange de la seconde liste n'entraine pas la création d'une troisième.

    Essayes de faire ces modifications qui sont simples et rapides.

    Bon courage

  7. #7
    Membre chevronné Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Points : 2 232
    Points
    2 232
    Par défaut
    Ça marche nickel. J'avais pas compris ce que je devais changer, merci à tous les 2 de vous être intéressé à mon problème .

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 133
    Points : 61
    Points
    61
    Par défaut
    Bonjour,

    Pour alimenter une liste déroulante à partir d'une autre, ça fonctionne très bien, j'ai bien assimilé le concept. Mais comment faire quand la 1ere liste est dans une boucle et affichée disons 10 fois ?
    Concretement, le résultat de ma requête Mysql me donne 10 résultats que j'affiche dans un tableau sous forme de 10 listes déroulantes.
    Comment faire pour que chaque liste m'en affiche une nouvelle ?
    Actuellement, chacune des 10 listes m'affiche la seconde liste qu'à la suite de la première.

    Heu.... j'espère que ke je me fais bien comprendre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] Listes liées qui ne fonctionnent pas sous IE 8
    Par unapologetic dans le forum AJAX
    Réponses: 4
    Dernier message: 27/02/2013, 11h04
  2. Réponses: 9
    Dernier message: 06/04/2011, 17h13
  3. Réponses: 8
    Dernier message: 14/05/2009, 22h54
  4. Listes imbriquées qui ne marchent pas
    Par Faboul dans le forum Access
    Réponses: 16
    Dernier message: 26/01/2007, 10h45

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