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 averti
    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 267
    Points : 367
    Points
    367
    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
    Loi de l’Inertie de la Programmation de Dijkstra
    Si vous ne savez pas ce que votre programme est censé faire, vous feriez bien de ne pas commencer à l’écrire.

  2. #2
    Expert éminent sénior

    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
    Points : 36 571
    Points
    36 571
    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+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

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

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 267
    Points : 367
    Points
    367
    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.
    Loi de l’Inertie de la Programmation de Dijkstra
    Si vous ne savez pas ce que votre programme est censé faire, vous feriez bien de ne pas commencer à l’écrire.

  4. #4
    Expert éminent sénior

    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
    Points : 36 571
    Points
    36 571
    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+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

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

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 267
    Points : 367
    Points
    367
    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
    Loi de l’Inertie de la Programmation de Dijkstra
    Si vous ne savez pas ce que votre programme est censé faire, vous feriez bien de ne pas commencer à l’écrire.

  6. #6
    Expert éminent sénior

    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
    Points : 36 571
    Points
    36 571
    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+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

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

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 267
    Points : 367
    Points
    367
    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...
    Loi de l’Inertie de la Programmation de Dijkstra
    Si vous ne savez pas ce que votre programme est censé faire, vous feriez bien de ne pas commencer à l’écrire.

  8. #8
    Expert éminent sénior

    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
    Points : 36 571
    Points
    36 571
    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+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

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

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 267
    Points : 367
    Points
    367
    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
    Loi de l’Inertie de la Programmation de Dijkstra
    Si vous ne savez pas ce que votre programme est censé faire, vous feriez bien de ne pas commencer à l’écrire.

  10. #10
    Expert éminent sénior

    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
    Points : 36 571
    Points
    36 571
    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+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

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

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 267
    Points : 367
    Points
    367
    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 !
    Loi de l’Inertie de la Programmation de Dijkstra
    Si vous ne savez pas ce que votre programme est censé faire, vous feriez bien de ne pas commencer à l’écrire.

+ 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