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] Initialisation de liste multiple


Sujet :

JavaScript

  1. #1
    Membre exp�riment�
    Homme Profil pro
    Responsable des �tudes
    Inscrit en
    Mars 2007
    Messages
    267
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activit� : Responsable des �tudes
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 267
    Par d�faut [AJAX] Initialisation de liste multiple
    Bonjour a tous, voil� j'ai suivi les diff�rents tuto du site, excellent d'ailleur pour commencer mais une question me tracasse et la solution qui va avec aussi...

    Ma premi�re page :
    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
     
    <html>
     <head>
     
    <script type='text/javascript'>
     
    function getXhr(){
    var xhr = null;
    	if(window.XMLHttpRequest) // Firefox et autres
    	xhr = new XMLHttpRequest();
    	else if(window.ActiveXObject){ // Internet Explorer
    		try {
    			xhr = new ActiveXObject("Msxml2.XMLHTTP");
    			} catch (e) {
    		    xhr = new ActiveXObject("Microsoft.XMLHTTP");
    			}
    		  }
    				else { // XMLHttpRequest non supporté par le navigateur
    				   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
    				   xhr = false;
    				}
                                    return xhr;
    			}
     
    function go()
    {
    var xhr = getXhr();
     
    xhr.onreadystatechange = function()
    	{
    	if(xhr.readyState == 4 && xhr.status == 200)
    	  {
    	leselect = xhr.responseText;
    	document.getElementById('cat2').innerHTML = leselect;
    		}
     
    	}
     
    xhr.open("POST","categorie2.php",true);
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    sel = document.getElementById('cat1');
    cat1 = sel.options[sel.selectedIndex].value;
    xhr.send("cat1="+cat1);
    }
     
    function goesp()
    {
    var xhr = getXhr();
     
    xhr.onreadystatechange = function()
    	{
    	if(xhr.readyState == 4 && xhr.status == 200)
    	  {
    	leselect = xhr.responseText;
    	document.getElementById('cat3').innerHTML = leselect;
    		}
     
    	}
     
    xhr.open("POST","categorie3.php",true);
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    sel2 = document.getElementById('catr2');
    catr2 = sel2.options[sel2.selectedIndex].value;
    xhr.send("catr2="+catr2);
    }
     
    </script>
     
     
     
     
     
     
    </head>
    	<body>
    		<form>
     
    <fieldset style="width: 500px">
     
    <legend>Catégories</legend>
     
    <label>Cat 1</label>
     
    <select name='cat1' id='cat1' onchange='go()'>
    <option value='-1'>Aucun</option>
    <?
    mysql_connect("localhost","root","");
    mysql_select_db("slayer");
    $res = mysql_query("SELECT * FROM categorie  ORDER BY categorie1");
    while($row = mysql_fetch_assoc($res))
    {
    echo "<option value='".$row["categorie1"]."'>".$row["categorie1"]."</option>";
    }
    ?>
    </select>
     
    <label>Cat 2</label>
     
    <div id='cat2' style='display:inline'>
    <select name='cate2'>
    <option value='-1'>Choisir la cat1</option>
    </select>
    </div>
     
    <label>Cat 3</label>
    <div id='cat3' style='display:inline'>
    <select name='cat3'>
    <option value='-1'>Choisir la cat2</option>
    </select>
    </div>
     
    </fieldset>
     
           </form>
    	</body>
    </html>
    page 2 :
    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
    <?php
     
    echo "<select name='catr2'  id='catr2' onchange='goesp()'>";
     
    if(isset($_POST["cat1"]))
    {
     
    mysql_connect("localhost","root","");
    mysql_select_db("slayer");
    $val1=$_POST["cat1"];
     
    $res = mysql_query("
    SELECT * FROM categorie2 WHERE cat1='".$val1."' ORDER BY cat2");
     
    while($row = mysql_fetch_assoc($res))
    {
    echo "<option value='".$row["cat2"]."'>".$row["cat2"]."</option>";
    }
     
    }
     
    echo "</select>";
    ?>
    page 3 :
    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
    <?php
     
    echo "<select name='cat3'>";
     
    if(isset($_POST["catr2"]))
    {
     
    mysql_connect("localhost","root","");
    mysql_select_db("slayer");
    $val2=$_POST["catr2"];
     
    $res = mysql_query("
    SELECT * FROM categorie3 WHERE cat2='".$val2."' ORDER BY cat3");
     
    while($row = mysql_fetch_assoc($res))
    {
    echo "<option value='".$row["cat3"]."'>".$row["cat3"]."</option>";
    }
     
    }
     
    echo "</select>";
    ?>
    Ma question comment faire pour que lorsque je change la liste 1, la liste 3 s'initalise aussi ?
    Tout fonctionne parfaitement sinon mais ce n'est pas top de voir :
    Categorie 1 categorie 2 categorie 3
    Achat------- Four----------choisir categorie 2...

    J'�sp�re que l'on c'est compris si quelqu'un peu m'aider....

    Merci d'avance

  2. #2
    Expert �minent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par d�faut
    Bonjour,
    Citation Envoy� par Alex70 Voir le message
    Ma question comment faire pour que lorsque je change la liste 1, la liste 3 s'initalise aussi ?
    En retour, ma question est : Pourquoi ?

    Ton script actuel alimente la liste 2 en fonction du choix de la liste 1.
    Or ta liste 3 d�pend d'un choix dans la liste 2.

    A priori (sauf r�gle que tu n'aurais pas donn�e), lors de l'alimentation de la liste 2 (ton traitement actuel), tu ne connais pas encore le choix qui sera fait dans la liste 2, pour le passer en param�tre au second appel Ajax qui alimentera la liste 3.

    C'est plus un probl�me logique que technique

    A+

  3. #3
    Membre exp�riment�
    Homme Profil pro
    Responsable des �tudes
    Inscrit en
    Mars 2007
    Messages
    267
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activit� : Responsable des �tudes
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 267
    Par d�faut
    Ce n'est pas un probl�me a proprement parler mais lorsque je change ma liste 1 ma liste 2 se positionne directement sur une valeur donc pourquoi ne pas directement mettre la troisi�me liste directement sur la valeur associ� de la liste 2 ?

    Voila ce que j'aimerais faire.

  4. #4
    Expert �minent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par d�faut
    Citation Envoy� par Alex70 Voir le message
    Ce n'est pas un probl�me a proprement parler mais lorsque je change ma liste 1 ma liste 2 se positionne directement sur une valeur donc pourquoi ne pas directement mettre la troisi�me liste directement sur la valeur associ� de la liste 2 ?
    Parce que c'est la r�gle que tu n'avais effectivement pas donn�e

    Il suffit que tu lances ton 2� appel Ajax (goesp() donc) � la fin de la fonction onreadystatechange du 1� appel (dans go() ), en lui passant bien s�r en param�tre la valeur de liste 2 sur laquelle tu te positionnes par d�faut ...

    A+

  5. #5
    Membre exp�riment�
    Homme Profil pro
    Responsable des �tudes
    Inscrit en
    Mars 2007
    Messages
    267
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activit� : Responsable des �tudes
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 267
    Par d�faut
    Aors merci de la r�ponse pas sur d'y arriv� mais je vais essay� comme je peux ^^

    Le souci est puije recuperais la valeur de la liste 2 directement ?
    puicequ'il y a XX choix possible dans la liste une.

    Trop complexe j'abandonne ou tu peux m'aider ?

    ps: on sait peut etre mal compris sur mon message pr�c�dent

  6. #6
    Expert �minent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par d�faut
    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
    function go()
    {
    var xhr = getXhr();
     
    xhr.onreadystatechange = function()
    	{
    	if(xhr.readyState == 4 && xhr.status == 200)
    	  {
    	leselect = xhr.responseText;
    	document.getElementById('cat2').innerHTML = leselect;
            setTimeout("goesp()", 100);
    		}
     
    	}
    ...
    Ca devrait suffire

    A+

  7. #7
    Membre exp�riment�
    Homme Profil pro
    Responsable des �tudes
    Inscrit en
    Mars 2007
    Messages
    267
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activit� : Responsable des �tudes
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 267
    Par d�faut
    Oua merci sa marche meme si je comprend pas la logique...

    je vais chercher pour comprendre mais un grand merci a toi.

    Finalement Ajax c'est fouce qu'on peut faire avec...

  8. #8
    Expert �minent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par d�faut
    Citation Envoy� par Alex70 Voir le message
    ps: on sait peut etre mal compris sur mon message pr�c�dent
    Le souci est puije recuperais la valeur de la liste 2 directement ?
    puicequ'il y a XX choix possible dans la liste une.
    Ta fonction goesp() le faisait d�j�
    EDIT : l� :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    sel2 = document.getElementById('catr2');
    catr2 = sel2.options[sel2.selectedIndex].value;
    xhr.send("catr2="+catr2);
    A+

  9. #9
    Membre exp�riment�
    Homme Profil pro
    Responsable des �tudes
    Inscrit en
    Mars 2007
    Messages
    267
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activit� : Responsable des �tudes
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 267
    Par d�faut
    oui non j'ai du mal a comprend l'appel de la deuxieme fonction dans la premi�re c'est surtout �a le souci en faite j'ai jamais fait d'ajax et �tant developpeur je m'y met par obligation.

    Le souci c'est ton settimeout

  10. #10
    Expert �minent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par d�faut
    Citation Envoy� par Alex70 Voir le message
    Le souci c'est ton settimeout
    Essaye sans !
    Je l'ai mis pour �tre s�r que les 2 objets httpRequest ne se marchent pas sur les pieds.
    Avec setTimeout, le 2� appel sera consid�r� comme fait en dehors de go()
    Sans, l'appel est fait � partir de go(), alors que le 1� objet xhr existe (peut �tre) toujours :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    function go()
    {
    var xhr = getXhr();
    ...
    Et comme il s'agit de variables locales ...

    A+

  11. #11
    Membre exp�riment�
    Homme Profil pro
    Responsable des �tudes
    Inscrit en
    Mars 2007
    Messages
    267
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activit� : Responsable des �tudes
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 267
    Par d�faut
    non non sa marche tr�s bien

    ce que je voulais dire c'est que je ne comprenais pas pourquoi tu ecriais

    settimeout !

    mais enfaite tu viens de m'�xpliquer

    Merci pour tout en tout cas !

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [AJAX] r�cup�rer les choix d'un liste multiple
    Par zooffy dans le forum G�n�ral JavaScript
    R�ponses: 3
    Dernier message: 04/03/2007, 19h17
  2. requ�te � partir d'une zone de liste multiple??
    Par chambon.denis dans le forum Access
    R�ponses: 5
    Dernier message: 23/01/2006, 10h46
  3. [Conception] inserer des valeurs provenant d'une liste multiple
    Par digger dans le forum PHP & Base de donn�es
    R�ponses: 10
    Dernier message: 24/11/2005, 17h35
  4. Valoriser un tableau avec le resultat d'une liste multiple
    Par christophe_j dans le forum G�n�ral JavaScript
    R�ponses: 5
    Dernier message: 17/11/2005, 11h01
  5. Comment initialiser une liste de composants avec une boucle ?
    Par EricSid dans le forum Composants VCL
    R�ponses: 5
    Dernier message: 06/04/2005, 18h46

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