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] Menus déroulants dynamiques par groupes


Sujet :

JavaScript

  1. #41
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut
    Met un alert dans ce code pour voir si tu recuperes bien les noms des livres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    				for (var i = 0 ; i < livres.length ; i++) {
    					var srv = livres[i];
    					var Livres = srv.nodeValue;
     alert("Nom du livre : "+Livres);
    //La tu ajoutes les livres dans le SELECT
    new_elem = new Option(Livres,i);
    				selbox.options[selbox.length] = new_elem;
    				}

  2. #42
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 32
    Points : 5
    Points
    5
    Par défaut
    Non j'ai "Object HTML Collection" qui ressort

    DOnc ce serait vers la que ca clocherai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //la tu recuperes le select dans lequel tu veux ajouter des elements
    var selbox = document.getElementById("livre");
     
     
    				for (var i = 0 ; i < livres.length ; i++) {
    					var srv = livres[i];
    					var NomsLivres = srv.nodeValue;
    Cela dit ça ressort quand même le bon nombre de livre pour chaque auteur sélectionné

  3. #43
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut
    Avec cela

    Remplace cela aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var livres= reponseT.getElementsByTagName("liste");

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for (var i = 0 ; i < livres.length ; i++) {
    					var srv = livres[i];
    var Livres= srv.getElementsByTagName("Livres")[0].firstChild.nodeValue;
     alert("Nom du livre : "+Livres);
    //La tu ajoutes les livres dans le SELECT
    new_elem = new Option(Livres,i);
    				selbox.options[selbox.length] = new_elem;
    				}

    EDIT : Oui c'est exactement ca , tous marche bien sauf que tu ne récupere pas la bon information du fichier Xml.

  4. #44
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 32
    Points : 5
    Points
    5
    Par défaut
    Je suis un peu perdu la...

    dans ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var livres= reponseT.getElementsByTagName("liste");
    a quoi correspond "liste" ?
    au nom de ma liste de livre? de ma liste d'auteur?

    A la base j'avais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var livres= reponseT.getElementsByTagName("NomsAuteurs");
    ensuite un peu plus bas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (var i = 0 ; i < livres.length ; i++) {
    					var srv = livres[i];
    var Livres= srv.getElementsByTagName("Livres")[0].firstChild.nodeValue;
    A quoi doit correspondre "Livres"?

  5. #45
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut
    Si ton xml a la forme


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <liste>
          <Livres>
          </Livres>
           <Livres>
          </Livres>
          <Livres>
          </Livres>
    ....    
    </liste>
    l'element 'liste" correspond a ton premier noeud du Xml et "Livres" au noeud enfant de "liste"

  6. #46
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 32
    Points : 5
    Points
    5
    Par défaut
    Ok donc, voici mon fichier fonction.js :

    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
    function getXhrTrap(){
    	if(window.XMLHttpRequest) // Firefox et autres
    	   var xhrT = new XMLHttpRequest();
    	else if(window.ActiveXObject){ // Internet Explorer
    	   try {
                    var xhrT = new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e) {
                    var xhrT = new ActiveXObject("Microsoft.XMLHTTP");
                }
    	}
    	else { // XMLHttpRequest non support2 par le navigateur
    	   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
    	   var xhrT = false;
    	}
    	return xhrT;
    }
     
    function getLivres(NomsAuteurs) {
     
    //Passe le nom de l'auteur en parametre de l'url
    var NomsAuteurs = document.getElementById('auteur').options[document.getElementById('auteur').selectedIndex].value;
    var arg = 'NomsAuteurs='+NomsAuteurs;
     
     
    	var xhrT = getXhrTrap();
     
    	xhrT.open("POST","ajaxLivre.php",true);
    	xhrT.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	xhrT.send(arg);
     
    	// On defini ce qu'on va faire quand on aura la reponse
    	xhrT.onreadystatechange = function()
    	{	
    		// On ne fait quelque chose que si on a tout recu et que le serveur est ok
    		if(xhrT && xhrT.readyState == 4 && xhrT.status == 200 && xhrT.responseXML)
    		{
    			reponseT = xhrT.responseXML.documentElement;
    			var livres = reponseT.getElementsByTagName("liste");
    //la tu recuperes le select dans lequel tu veux ajouter des elements
    var selbox = document.getElementById("livre");
     
     
    				for (var i = 0 ; i < livres.length ; i++) {
    					var srv = livres[i];
    					var NomsLivres = srv.nodeValue;
    					var livres = srv.getElementsByTagName("NomsLivres")[0].firstChild.nodeValue;
    					 alert("Nom du livre : "+livres);
     
    //La tu ajoutes les livres dans le SELECT
    selbox.options[i] = new Option(livres[i],i); 
    //new_elem = new Option(livres,i);
    //new_elem.innerHTML=livres[i];	
     
    				//selbox.appendChild(new_elem);
     
    				//selbox.options[selbox.length] = new_elem;
    				}
    		}
    	}
    	}
    Ainsi que mon fichier AjaxLivres.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
    <?php
    if (isset($_POST["NomsAuteurs"])) {
            
    $buffer  = '<?xml version="1.0"?>';
            $buffer .= '<liste>';
    mysql_connect("localhost","arkhantia","arkh123987");
    mysql_select_db("ordicleanbd");
    $res = mysql_query("SELECT NomsLivres FROM bibliotheque WHERE NomsAuteurs = '".$_POST['NomsAuteurs']."' ");
    while($row = mysql_fetch_assoc($res)){
    $buffer .='<NomsLivres>'.$row['NomsLivres'].'</NomsLivres>';
    }
    $buffer .='</liste>';
    header('Content-Type: text/xml');
            print $buffer;
    }
            ?>
    Malgré cela, j'ai bien une reponse au poste
    <?xml version="1.0"?><liste><NomsLivres>AAAA</NomsLivres><NomsLivres>BBBB</NomsLivres><NomsLivres>CCCC

    </NomsLivres></liste>
    genere par mon formulaire.

    Mais rien dans ma seconde liste

  7. #47
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var livres = srv.getElementsByTagName("NomsAuteurs")[0].firstChild.nodeValue;

    Erreur , t'as balise Xml se nomme <NomsLivres>, il faut donc que tu mettes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var livres = srv.getElementsByTagName("NomsLivres")[0].firstChild.nodeValue;

  8. #48
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 32
    Points : 5
    Points
    5
    Par défaut
    Mise à jour des codes de mon poste précédent.

    Désolé erreur d'inattention. j'ai codé toute la nuit :s

    Pas d'erreur d'exécution mais pas d'alerte et rien dans ma seconde liste :s

  9. #49
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut
    Et si tu met ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var livres = reponseT.getElementsByTagName("NomsLivres");


    et


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (var i = 0 ; i < livres.length ; i++) {
    					var srv = livres[i];
    					var livres = srv[0].firstChild.nodeValue;
    					 alert("Nom du livre : "+livres);

  10. #50
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 32
    Points : 5
    Points
    5
    Par défaut
    Nous nous y rapprochons!!

    avec ceci :
    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
    function getXhrTrap(){
    	if(window.XMLHttpRequest) // Firefox et autres
    	   var xhrT = new XMLHttpRequest();
    	else if(window.ActiveXObject){ // Internet Explorer
    	   try {
                    var xhrT = new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e) {
                    var xhrT = new ActiveXObject("Microsoft.XMLHTTP");
                }
    	}
    	else { // XMLHttpRequest non support2 par le navigateur
    	   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
    	   var xhrT = false;
    	}
    	return xhrT;
    }
     
    function getLivres(NomsAuteurs) {
     
    //Passe le nom de l'auteur en parametre de l'url
    var NomsAuteurs = document.getElementById('auteur').options[document.getElementById('auteur').selectedIndex].value;
    var arg = 'NomsAuteurs='+NomsAuteurs;
     
     
    	var xhrT = getXhrTrap();
     
    	xhrT.open("POST","ajaxLivre.php",true);
    	xhrT.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	xhrT.send(arg);
     
    	// On defini ce qu'on va faire quand on aura la reponse
    	xhrT.onreadystatechange = function()
    	{	
    		// On ne fait quelque chose que si on a tout recu et que le serveur est ok
    		if(xhrT && xhrT.readyState == 4 && xhrT.status == 200 && xhrT.responseXML)
    		{
    			reponseT = xhrT.responseXML.documentElement;
    			var livres = reponseT.getElementsByTagName("NomsLivres");
    //la tu recuperes le select dans lequel tu veux ajouter des elements
    var selbox = document.getElementById("livre");
     
     
    				for (var i = 0 ; i < livres.length ; i++) {
    					var srv = livres[i];
    					var NomsLivres = srv.nodeValue;
    					var livres = srv.firstChild.nodeValue;
    					 alert("Nom du livre : "+livres);
     
    //La tu ajoutes les livres dans le SELECT
    selbox.options[i] = new Option(livres[i],i); 
    //new_elem = new Option(livres,i);
    //new_elem.innerHTML=livres[i];	
     
    				//selbox.appendChild(new_elem);
     
    				//selbox.options[selbox.length] = new_elem;
    				}
    		}
    	}
    	}
    j'ai un bon nom complet du livre dans l'alert, mais j'en ai qu'un au lieu de 3 pour Mr XXX (3 livres) ou Mr YYY (2 livres) et seule la première lettre apparait ensuite dans mon menu déroulant
    puis une erreur de firebug :
    srv.firstChild has no properties
    [Break on this error] var livres = srv.firstChild.nodeValue;

    ensuite j'ai essayé ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var livres = srv.nodeValue;
    alert("Nom du livre : "+livres);
    j'ai une alert avec "null" en nom de livre et une erreur firebug :
    livres has no properties
    [Break on this error] selbox.options[i] = new Option(livres[i],i);

  11. #51
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut
    Essaye comme ca :

    Structure Xml (modifie le fichier php qui te permet de créér le fichier xml selon le schéma ci-dessous):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0"?>
    <liste>
    <NomLivres>
    <nom>
    </nom>
    <NomLivres>
    </liste>
    Comme tu pourras, ajouter facilement un autre paramètre , éventuellement l'id des livres pour les récupérer plus facilement apres (ca évite d'avoir des soucis s'il existe par exemple deux livres de même nom)
    Pour cela il faudrait que tu ajoute dans ta table , un champ id_auteur et un id_livre que tu mets en auto_increment

    et puis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    .....
    livres = reponseT.getElementsByTagName("NomsLivres");
    ......
    for (var i = 0 ; i < livres.length ; i++) {
    .......
    var Livres= srv.getElementsByTagName("nom")[0].firstChild.nodeValue;
    .......
    				}
    .......

  12. #52
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 32
    Points : 5
    Points
    5
    Par défaut
    Voici mon nouveau fichier ajaxLivres.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
    <?php
    if (isset($_POST["NomsAuteurs"])) {
            
    $buffer  = '<?xml version="1.0"?>';
            $buffer .= '<liste>';
    mysql_connect("localhost","arkhantia","arkh123987");
    mysql_select_db("ordicleanbd");
    $res = mysql_query("SELECT NomsLivres FROM bibliotheque WHERE NomsAuteurs = '".$_POST['NomsAuteurs']."' ");
    while($row = mysql_fetch_assoc($res)){
    $buffer .='<NomsLivres><nom>'.$row['NomsLivres'].'</nom></NomsLivres>';
    }
    $buffer .='</liste>';
    header('Content-Type: text/xml');
            print $buffer;
    }
            ?>
    ainsi que mon fichier fonction.js
    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
    function getXhrTrap(){
    	if(window.XMLHttpRequest) // Firefox et autres
    	   var xhrT = new XMLHttpRequest();
    	else if(window.ActiveXObject){ // Internet Explorer
    	   try {
                    var xhrT = new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e) {
                    var xhrT = new ActiveXObject("Microsoft.XMLHTTP");
                }
    	}
    	else { // XMLHttpRequest non support2 par le navigateur
    	   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
    	   var xhrT = false;
    	}
    	return xhrT;
    }
     
    function getLivres(NomsAuteurs) {
     
    //Passe le nom de l'auteur en parametre de l'url
    var NomsAuteurs = document.getElementById('auteur').options[document.getElementById('auteur').selectedIndex].value;
    var arg = 'NomsAuteurs='+NomsAuteurs;
     
     
    	var xhrT = getXhrTrap();
     
    	xhrT.open("POST","ajaxLivre.php",true);
    	xhrT.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	xhrT.send(arg);
     
    	// On defini ce qu'on va faire quand on aura la reponse
    	xhrT.onreadystatechange = function()
    	{	
    		// On ne fait quelque chose que si on a tout recu et que le serveur est ok
    		if(xhrT && xhrT.readyState == 4 && xhrT.status == 200 && xhrT.responseXML)
    		{
    			reponseT = xhrT.responseXML.documentElement;
    			var livres = reponseT.getElementsByTagName("NomsLivres");
    //la tu recuperes le select dans lequel tu veux ajouter des elements
    var selbox = document.getElementById("livre");
     
     
    				for (var i = 0 ; i < livres.length ; i++) {
    					var srv = livres[i];
    					//var NomsLivres = srv.nodeValue;
    					var livres = srv.getElementsByTagName("nom")[0].firstChild.nodeValue;
    					 alert("Nom du livre : "+livres);
     
    //La tu ajoutes les livres dans le SELECT
    selbox.options[i] = new Option(livres[i],i); 
    //new_elem = new Option(livres,i);
    //new_elem.innerHTML=livres[i];	
     
    				//selbox.appendChild(new_elem);
     
    				//selbox.options[selbox.length] = new_elem;
    				}
    		}
    	}
    	}
    Avec ce codage, j'ai une seule alert avec un nom de livre correspondant a l'auteur puis rien dans ma seconde liste.

    Message de firebug :
    srv.getElementsByTagName is not a function
    [Break on this error] var livres = srv.getElementsByTagName("nom")[0].firstChild.nodeValue;

  13. #53
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut
    Tu as encore fait une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    				for (var i = 0 ; i < livres.length ; i++) {
    					var srv = livres[i];
    					//var NomsLivres = srv.nodeValue;
    					var livres = srv.getElementsByTagName("nom")[0].firstChild.nodeValue;
    					 alert
    tu crées une variable (var livres) dans le for , alors que tu utilises déja cette variable pour stocké les infos du noeud "nomLivres"

    Remplace livres par livre par exmple comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var livre = srv.getElementsByTagName("nom")[0].firstChild.nodeValue;
    new_elem = new Option(livre,i);
    selbox.options[selbox.length] = new_elem;

  14. #54
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 32
    Points : 5
    Points
    5
    Par défaut
    Je crois qu'il est temps pour moi de faire ma nuit car je fais des erreurs stupides :p

    Ok alors l'alert me sort bien le bon nombre et les noms complets,
    ma liste se rempli mais qu'avec les premières lettres des livres.

    Aussi, lorsque je clique sur Mr XXX qui possède 3 livre, il me sort bien 3 livres, puis lorsque je clique sur Mr ZZZ qui ne possède qu'un livre, la première valeur de mon menu déroulant de livre est remplacé par la valeur du livre de Mr ZZZ


    EN résumé, après avoir choisi Mr XXX (3 livres) , puis Mr ZZZ (2 livres)
    j'ai donc dans ma seconde liste déroulante :

    "F"
    "B"
    "C"

  15. #55
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut
    J'ai pas trop di'dée de pourquoi tu n'a que la premiere lettre des livres(ca doit ere tout bete), normalement l'attribut nodeValue doit récuprer la valeur du noeud, donc....

    Par contre pour l'autre point il faut tu vides le SELECT a chaque fois en mettant cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    selbox.options[selbox.length] = new Option(' ',' ');

    au dessus du for

  16. #56
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 32
    Points : 5
    Points
    5
    Par défaut
    Merci.

    En effet l'erreur était simple pour les premières lettre:
    il fallait remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    selbox.options[i] = new Option(livres[i],i);
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    selbox.options[i] = new Option(livres,i);
    par contre, meme avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //la tu recuperes le select dans lequel tu veux ajouter des elements
     
    var selbox = document.getElementById("livre");
    selbox.options[selbox.length] = new Option(' ',' ');
    				for (var i = 0 ; i < livres.length ; i++) {
     
    				 	var srv = livres[i];
    					//var NomsLivres = srv.nodeValue;
    					var livre = srv.getElementsByTagName("nom")[0].firstChild.nodeValue;
    ça ajoute les nouveaux choix de la seconde liste a partir de la premiere saisis.
    Je m'explique:
    Je clique sur Mr XXX (3 livres)
    dans ma seconde liste apparait ses 3 livres : AAA / BBB / CCC
    ensuite je clique sur Mr ZZZ (1 livre), et dans ma seconde liste apparait toujours 3 livres : FFF / BBB / CCC
    (FFF correspond bien au livre de Mr ZZZ)

    existe t il un moyen de purger la seconde liste a chaque choix dans ma premiere liste?

  17. #57
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut
    Tu peux faire comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ( selbox.options.length > 0 )
    			{
    				selbox.options[0] = null;
    			}

  18. #58
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 32
    Points : 5
    Points
    5
    Par défaut
    YES!! Je tiens à féliciter mes deux compères d'aventure qui n'ont pas baisser les bras pour un inconnu développeur.

    Il est loin le temps ou le "partage" régnait sur le net. Leur ténacité est un exemple pour tous.

    Voici mes codes sources pour ceux qui sont ou seront dans la même situation


    pagechoixauteurs.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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <html>
    	<head>
    		<title>Tutoriel Ajax (XHTML + JavaScript + XML)</title>
    		<script type="text/javascript" src="./fonction.js"></script>
     
    	</head>
    	<body>
    	<script type="text/javascript" src="./fonction.js"></script>
    		<form name="pagechoixauteurs">
    			<fieldset style="width: 500px">
    				<legend>Liste liées</legend>
    				<label>Auteurs</label>
    				<select name='auteur' id='auteur' onchange='getLivres(this.form.auteur.value)' >
    					<option value='-1' >Aucun</option>
    					<?
    						mysql_connect("localhost","LOGIN","PASSWORD");
    						mysql_select_db("NOM_DE_LA_BASE_DE_DONNEES");
    						$res = mysql_query("SELECT * FROM bibliotheque GROUP BY NomsAuteurs");
    						while($row = mysql_fetch_assoc($res)){
    							echo "<option value='".$row["NomsAuteurs"]."'>".$row["NomsAuteurs"]."</option>";
    						}
    					?>
    				</select>
    				<label>Livres</label>
    				<select name='livre'  id='livre' Size=1 style=width:300px>
    					<option value='-1'>Choisir un livre</option>
    				</select>
    			</fieldset>
    		</form>
    	</body>
    </html>

    fonction.js

    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
    function getXhrTrap(){
    	if(window.XMLHttpRequest) // Firefox et autres
    	   var xhrT = new XMLHttpRequest();
    	else if(window.ActiveXObject){ // Internet Explorer
    	   try {
                    var xhrT = new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e) {
                    var xhrT = new ActiveXObject("Microsoft.XMLHTTP");
                }
    	}
    	else { // XMLHttpRequest non support2 par le navigateur
    	   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
    	   var xhrT = false;
    	}
    	return xhrT;
    }
     
    function getLivres(NomsAuteurs) {
     
    //Passe le nom de l'auteur en parametre de l'url
    var NomsAuteurs = document.getElementById('auteur').options[document.getElementById('auteur').selectedIndex].value;
    var arg = 'NomsAuteurs='+NomsAuteurs;
     
     
    	var xhrT = getXhrTrap();
     
    	xhrT.open("POST","ajaxLivre.php",true);
    	xhrT.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	xhrT.send(arg);
     
    	// On defini ce qu'on va faire quand on aura la reponse
    	xhrT.onreadystatechange = function()
    	{	
    		// On ne fait quelque chose que si on a tout recu et que le serveur est ok
    		if(xhrT && xhrT.readyState == 4 && xhrT.status == 200 && xhrT.responseXML)
    		{
    			reponseT = xhrT.responseXML.documentElement;
    			var livres = reponseT.getElementsByTagName("NomsLivres");
    //la tu recuperes le select dans lequel tu veux ajouter des elements
     
    var selbox = document.getElementById("livre");
    while ( selbox.options.length > 0 )
    			{
     
    				selbox.options[0] = null;
     
    			}
    				for (var i = 0 ; i < livres.length ; i++) {
     
    				 	var srv = livres[i];
    					var livre = srv.getElementsByTagName("nomdulivre")[0].firstChild.nodeValue;
    					 //fonction de test a décommenter pour debug
    					 //alert("Nom du livre : "+livre);
     
    //La tu ajoutes les livres dans le SELECT
    							selbox.options[i] = new Option(livre,i); 
     
    			}
    		}
    	}
    	}
    ajaxLivre.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
    <?php
     
    if (isset($_POST["NomsAuteurs"])) {
            
    $buffer  = '<?xml version="1.0"?>';
            $buffer .= '<liste>';
    mysql_connect("localhost","LOGIN","PASSWORD");
    mysql_select_db("NOM_DE_LA_BASE_DE_DONNEES");
    $res = mysql_query("SELECT NomsLivres FROM bibliotheque WHERE NomsAuteurs = '".$_POST['NomsAuteurs']."' ");
    while($row = mysql_fetch_assoc($res)){
    $buffer .='<NomsLivres><nomdulivre>'.$row['NomsLivres'].'</nomdulivre></NomsLivres>';
    }
    $buffer .='</liste>';
    header('Content-Type: text/xml');
            print $buffer;
    }
            ?>
    et enfin la table "bibliotheque" à mettre dans votre base de donnée utilisée.

    bibliotheque.sql

    SET FOREIGN_KEY_CHECKS=0;
    -- ----------------------------
    -- Table structure for bibliotheque
    -- ----------------------------
    DROP TABLE IF EXISTS `bibliotheque`;
    CREATE TABLE `bibliotheque` (
    `Code` int(10) NOT NULL auto_increment,
    `NomsAuteurs` varchar(50) default NULL,
    `NomsLivres` varchar(50) default NULL,
    PRIMARY KEY (`Code`),
    KEY `Code1` (`Code`)
    ) ENGINE=MyISAM AUTO_INCREMENT=27 DEFAULT CHARSET=latin1;

    -- ----------------------------
    -- Records
    -- ----------------------------
    INSERT INTO `bibliotheque` VALUES ('1', 'MR XXX', 'AAAA');
    INSERT INTO `bibliotheque` VALUES ('2', 'MR XXX', 'BBBB');
    INSERT INTO `bibliotheque` VALUES ('3', 'MR XXX', 'CCCC');
    INSERT INTO `bibliotheque` VALUES ('4', 'MR YYY', 'DDDD');
    INSERT INTO `bibliotheque` VALUES ('5', 'MR YYY', 'EEEE');
    INSERT INTO `bibliotheque` VALUES ('6', 'MR ZZZ', 'FFFF');
    Encore merci à vous

  19. #59
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 32
    Points : 5
    Points
    5
    Par défaut
    J'aurais une petite question :

    le value de ma seconde liste est un numéro.
    Si j'ai bien compris, il correspond a "i" et est utilisé pour compter les entrées de la 2nd liste.
    Je pense qu'il est indispensable de la laisser ainsi.

    Malheureusement, j'aimerai récupérer le nom du livre affiché comme valeur.

    Savez vous que dois je ajouter?

    Merci pour votre compréhension

  20. #60
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par carmi Voir le message
    le value de ma seconde liste est un numéro.
    Si j'ai bien compris, il correspond a "i" et est utilisé pour compter les entrées de la 2nd liste.
    Je pense qu'il est indispensable de la laisser ainsi.
    Non, pas forcément, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    selbox.options[i] = new Option(livre,livre);
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

Discussions similaires

  1. Menus déroulants dynamiques
    Par okoweb dans le forum jQuery
    Réponses: 2
    Dernier message: 05/10/2011, 19h05
  2. [PHP 5.0] les résultats selon 2 menus déroulants dynamiques, liés entre eux
    Par aspkiddy dans le forum Langage
    Réponses: 3
    Dernier message: 09/06/2011, 12h36
  3. [AJAX] Menus déroulants dynamiques
    Par deidei dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/10/2008, 08h49
  4. [DOM] listes déroulantes dynamiques et passage de paramètres
    Par sorcade dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 09/09/2008, 11h07
  5. [SQL] Relation entre deux menus déroulants dynamiques
    Par intissar_g dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/11/2007, 15h36

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