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

AJAX Discussion :

liste déroulante liée à un champ texte


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 46
    Par défaut liste déroulante liée à un champ texte
    Bonjour

    Dans un formulaire j'ai un champ texte pour mettre le code postal

    Je voudrais que lorsqu'on rentre le code postal le département correspond s'affiche dans la liste departements

    J'avais fait la même chose avec les regions et les départements : montage d'une région par rapport au département mais là je vois pas comment faire

    Si vous avez des suggestions ou autres je suis preneur

    Cordialement

  2. #2
    Membre Expert

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 588
    Par défaut
    Salut,

    Justement le tuto existe déjà https://x-zolezzi.developpez.com/tut...utocompletion/ adapte le selon ton besoin, tu auras logiquement besoin que de la requête ajax lors du changement d'état du champ code postal qui récupéra le nom de la ville à mon avis.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 46
    Par défaut liste déroulante liée à un champ texte
    Salut

    Oui j'avais déjà utilisé ce script et il est super

    Mais la ce que je veux c'est un peu différent : j'ai une table département que je monte dans une liste et ce que je voudrais c'est remonter le département en fonction des 2 premiers chiffres du code postal.

    Par exemple la personne tape le code postal 12100 et le département Aveyron apparaît dans la liste départements : est-ce que vous pensez que je peux adapter ce script à ce que je voudrais faire ??

    Cordialement

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    le principe est le même, que ce soient 2 listes liées, ou 1 liste <select> et un <input>.

    La différence est qu'on fera sur l'<input> : "(on)keyup" au lieu de "(on)change".

    Et pour déclencher l'action à partir du 2ème chiffre :
    Dernière modification par rawsrc ; 03/10/2019 à 19h43.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 46
    Par défaut champ texte et liste déroulante
    Salut

    Avant d'essayer la proposition précédente je me suis dit : je vais essayer de faire mon propre truc (quitte à prendre la solution proposée si la mienne ne fonctionne pas)

    Don je me suis fait une page avec un formulaire basique : champ texte (pour mon code postal) et une liste déroulante pour mes départements : précision dans ma table départements l'id auto increment n'est pas le le numéro du département (par exemple le département 33 a l'id 5 : j'ai fait cela au cas ou nos politiciens toujours en quête de sensations voudrais changer le num de leur département !!)

    Donc voici mon formulaire de départ
    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     
    <script type="text/javascript" src="../01_scripts/oXHR.js"></script> (appel de l'instance ajax)
    <script type="text/javascript">
    <!-- 
     
    function request(oSelect) {
    	var value = oSelect.options[oSelect.selectedIndex].value;
    	var xhr   = getXMLHttpRequest();
     
    	xhr.onreadystatechange = function() {
    		if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
    			readData(xhr.responseXML);
    			document.getElementById("loader").style.display = "none";
    		} else if (xhr.readyState < 4) {
    			document.getElementById("loader").style.display = "inline";
    		}
    	};
     
    	xhr.open("POST", "choixdepartement.php", true);
    	xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    //	xhr.send("departementId=" + value);
    	xhr.send("cp"); (mon code postal)
    }
     
    function readData(oData) {
    	var nodes   = oData.getElementsByTagName("item");
    	var oSelect = document.getElementById("lst_departements");
    	var oOption, oInner;
     
    	oSelect.innerHTML = "";
    	for (var i=0, c=nodes.length; i<c; i++) {
    		oOption = document.createElement("option");
    		oInner  = document.createTextNode(nodes[i].getAttribute("departementLibelle"));
    		oOption.value = nodes[i].getAttribute("departementId");
     
    		oOption.appendChild(oInner);
    		oSelect.appendChild(oOption);
    	}
    }
    //-->
    </script>
    </head>
    <?php
    include('../01_scripts/connexion.php');
    ?>
    <body>
    <?php
    ?>
    <form name="cp" method="post" action="01_enreg_cp.php">
    	<table width="100%" border="1" cellspacing="1" cellpadding="0">
      <tbody>
        <tr>
          <td>Code Postal</td>
          <td><input type="text" name="cp" size="6"  onblur="request(this);"></td>
        </tr>
        <tr>
          <td>Le département </td>
          <td><select id="lst_departements"></select></td>
        </tr>
        <tr>
          <td colspan="2">&nbsp;</td>
     
        </tr>
        <tr>
         <td colspan="2"><input type="submit" name="envoyer" value="Enregistrer"</td>
        </tr>
      </tbody>
    </table>
     
    </form>
    </body>
    </html>
    Puis voici ma page choixdepartement.php (j'avais fait la même chose pour les régions et c'était nickel) et je pense que c'est au niveau du code postal que cela coince !!

    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
     
    <?php
     
    header("Content-Type: text/xml");
    echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
    include('../01_scripts/connexion.php');
    include('../01_scripts/lib.php');
    echo "<list>";
     
    $codePostal = (isset($_POST["cp"])) ? htmlentities($_POST["cp"]) : NULL;
    if ($codePostal) {
            
            $departementNumero = substr($codePostal,0,-3);
     
            $sql = "SELECT departementId,departementLibelle,departementNumero FROM gp_departements WHERE departementNumero = '$departementNumero'";
            $req = $db->prepare($sql);
            $req->bindValue(':departementNumero', $departementNumero,PDO::PARAM_INT);
            $req->execute();
            $r = $req->fetch();
            $departementId=$r['departementId'];
            $departementLibelle=$r['departementLibelle'];
            while ($r = $req->fetch()) {    
    //              echo "<item id=\"" . $back["id"] . "\" name=\"" . $back["name"] . "\" />";
                    echo "<item departementId=\"" . $r["departementId"] . "\" departementLibelle=\"" . $r["departementLibelle"] . "\" />";
            }
    }
     
    echo "</list>";
     
    ?>
    Ou est mon erreur ??

    Cordialement

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par leblaireau12 Voir le message
    ...Ou est mon erreur ??...
    Il va falloir être PLUS PRÉCIS que ça...

    1-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function request(oSelect) {
    	var value = oSelect.options[oSelect.selectedIndex].value;
    Déjà, mets des noms de variables/fonctions plus explicites.

    Ici, tu dois récupérer un <input>. Or, tu utilises la syntaxe pour un <select>.
    Pour un <input> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function select_dept_from_input_cp(oInput) {
    	var value = oInput.value;
    2- Ensuite, mets des explications dans ton code, ainsi que des console.log() pour savoir ce que contiennent les données.

Discussions similaires

  1. Liste déroulante liée à plusieurs champs textes
    Par moimeme340 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 25/05/2011, 08h16
  2. [MySQL] comment insérer des données d'une liste déroulante dans un champ texte
    Par berti dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/01/2008, 09h12
  3. Concaténer deux listes déroulantes dans un champs texte en direct
    Par arnaudperfect dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 11/12/2007, 17h50
  4. Réponses: 10
    Dernier message: 27/03/2007, 12h21
  5. Liste déroulante remplie un champs texte
    Par tukutt dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 22/02/2007, 15h52

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