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] Lier une liste déroulant à un champ texte


Sujet :

JavaScript

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut [AJAX] Lier une liste déroulant à un champ texte
    Bonjour,

    J'ai créer un formulaire avec un champ texte et une liste déroulante. Le contenu de la liste déroulante dépend du contenu du chams texte.

    La liste déroulante ce met à jour grâce à Ajax (requête sql, etc...)

    Mon soucie est que mon script ne fonctionne pas et je ne trouve pas l'erreur.

    Voici mon code :

    Page index.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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    <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;
    			}
     
    			/**
    			* Méthode qui sera appelée sur le click du bouton : nom > prenom
    			*/
    			function go()
    			{
    				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('prenom').innerHTML = leselect;
    					}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","ajaxPrenom.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
    				// ici, l'id de la marque
    				sel = document.getElementById('nom');
    				id_nom = sel.options[sel.selectedIndex].value;
    				xhr.send("id_Nom="+id_nom);
    			}
    </script>
    </HEAD>
    <BODY>
    <input name="auto_completion1" type="text" id="auto_completion1" size="22" onblur="go()" />
     
    <div id="prenom" style="display:inline">
        <select name="prenom" style="width:140px; height:15px"></select>
    </div>
    </BODY>
    La page ajaxPrenom.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
    <?php
    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //  CONNEXION BASE DE DONNEES
    ///////////////////////////////////////////////////////////////////////////////////////////////////
    require_once( '../../mysql/connexion_sql.php' );
     
    //$_POST["id_Nom"] = "dubois";
     
    echo "<select name='prenom' style=\"width:140px\">";
     
    if(isset($_POST["id_Nom"]))
    {
    echo $_POST["id_Nom"];
            $res = mysql_query("SELECT * FROM utilisateur WHERE nom='".$_POST["id_Nom"]."' ORDER BY prenom");
            while($row = mysql_fetch_assoc($res))
            {
                    echo "<option value='".$row["id_utilisateur"]."'>".$row["prenom"]."</option>";
            }
    }
            echo "</select>";
    ?>
    - la requête SQL fonctionne bien, je l'ais testé.
    - le onblur="go()" aucun problème, j'ai tester la fonction avec une alert pour voir si la fonction est bien appelé.

    J'y connais pas grand chose en Javascript et encore moins en Ajax.
    J'ai repris un bout de code qui fonctionne correctement (lier deux listes déroulantes) pour l'adapter à mon utilisation.

    Auriez vous des idées pour résoudre mon problème ?

    Merci d'avance

    Arnaud

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    J'ai un peu affiner ma recherche de mon problème.

    En faite, le problème bien du faite, que je n'arrive pas à envoyé la valeur entré dans mon champ texte à la page ajaxPrenom.php qui permet de réaliser la requête SQL et de m'affichier ma liste déroulante.

    Le script Ajax est adapter pour une liste déroulante à une autre liste déroulante, mais pas un champ texte à une liste déroulante.

    Je pense que cela vient du "value" présent dans les listes déroulantes et que je n'ai pas dans mon champs texte.

    Pas d'idée ???

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Bon, j'ai tester d'une liste déroulante à une autre sans mettre de values, ca fonctionne.

    J'ai donc pensé qu'avec un champ texte ca passerai aussi. Malheuresement non.

    Je pense que le problème provient de l'évenement javacript pour envoyer mes données saisies dans le champs texte au script Ajax...

    Comment faire ?


    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
    <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;
    			}
     
    			/**
    			* Méthode qui sera appelée sur le click du bouton : nom > prenom
    			*/
    				function go(){
    				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('prenom').innerHTML = leselect;
    					}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","ajaxPrenom.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
    				// ici, l'id de la marque
    				sel = document.getElementById('nom');
    				id_utilisateur = sel.options[sel.selectedIndex].value;
    				xhr.send("id_Utilisateur="+id_utilisateur);
    			}
    </script>
     
    <input type="text" size="22" name="nom" id="nom" onChange="go()"/>

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Personne peut me répondre ?

  5. #5
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    il y a personne sur ce forum ?

  6. #6
    Membre actif
    Profil pro
    Ingénieur
    Inscrit en
    Mars 2007
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mars 2007
    Messages : 199
    Points : 291
    Points
    291
    Par défaut
    Il faut que ton code soit en rapport avec ce que tu définis comme objet :

    Dans ta page index.php modifie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sel = document.getElementById('nom');
    id_nom = sel.options[sel.selectedIndex].value;
    xhr.send("id_Nom="+id_nom);
    Par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    id_nom = document.getElementById( 'auto_completion1' ).value;
    xhr.send("id_Nom="+id_nom);

  7. #7
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Ok merci, ca fonctionne nikel !

    Merci beaucoup

  8. #8
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    ...mais ne fonctionne pas sous fixefox...

    Tu serais comment faire ?

    merci encore

  9. #9
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    enfin ca fonctionne mais il me fais chier avec les majuscules, miniscules...

    Je vais convertir la chaine de carractère en miniscule avant de faire la requête comme ca pas de soucie !

  10. #10
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    oué moi rien comprendre car un coup ca marche, un coup ca déconne...


  11. #11
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Bon c'est good : j'ai changer l'évenement :

    <input type="text" size="22" name="nom" id="nom" onblur="go()"/>

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

Discussions similaires

  1. Formulaire liste déroulante et champ texte
    Par Pwouaro dans le forum IHM
    Réponses: 6
    Dernier message: 05/02/2008, 09h02
  2. [AJAX] lier deux listes déroulantes alimenté par une base de données (Mysql)
    Par arnaudperfect dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/04/2007, 01h06
  3. lier une liste déroulante et un simple texte HTML
    Par gregolak dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 23/07/2006, 15h42
  4. Lier checkbox, liste déroulante et input texte
    Par pymouse dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/05/2006, 14h58
  5. Lier checkbox, liste déroulante et input texte
    Par pymouse dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 18/05/2006, 11h32

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