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 :

Deux select liés sans l'aide d'AJAX


Sujet :

JavaScript

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 16
    Par défaut Deux select liés sans l'aide d'AJAX
    Bonjour à tous !

    Cela fait maintenant quelques jours que je souhaite lier deux Selects uniquement à l'aide de javascript sans connexion serveur.

    -> Pour faire simple, j'ai un premier Select qui permet de choisir une région.
    En fonction du choix effectué, le second affichera les départements de la région sélectionnée...

    Voici mon idée de script :

    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
    <select name="regions" id="re" onchange="dep();">
     
     
    <option value="reset">->Choisissez une région<-</option>
    <option value="Alsace">Alsace</option>
    .....
     
     
    </select>
     
     
    <script type="text/javascript">
     
    	function dep() {
     
    		var dep = document.getElementById('re');
     
     
    		if (dep.value == "Alsace")
     
    			{
     
    			document.getElementById('dep').options[1] = new Option('Bas-Rhin');
    			document.getElementById('dep').options[2] = new Option('Haut-Rhin');
     
    			}
     
    		if (dep.value == "Aquitaine")
     
    			{
     
    			document.getElementById('dep').options[1] = new Option('Dordogne');
     
     
    			} ....
    }
    </script>
     
     
    <select name="selectdpt" id="dep">
     
     
    <option value="reset"<?php if ($_POST['selectdpt'] == "reset") { echo "selected='selected'";}?>>->Choisissez un département<-</option>
    // S'affiche ici les options supplémentaires...
     
     
    </select>

    Ce script fonctionne mais je me demande s'il est possible de faire mieux...Qu'en pensez-vous ?

  2. #2
    Membre actif
    Avatar de Mell
    Femme Profil pro
    Développeuse Front-end
    Inscrit en
    Janvier 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeuse Front-end
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2011
    Messages : 107
    Par défaut
    Peut être en passant par un tableau à plusieurs dimensions

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 16
    Par défaut
    Donc je pourrai pour chaque régions établir un array avec les départements correspondants ?

  4. #4
    Membre actif
    Avatar de Mell
    Femme Profil pro
    Développeuse Front-end
    Inscrit en
    Janvier 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeuse Front-end
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2011
    Messages : 107
    Par défaut
    Je vois pas pourquoi ça ne fonctionnerais pas
    Essai tu verras bien.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 16
    Par défaut
    Je test ça et je reviens

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 16
    Par défaut
    Voila j'ai testé mais ça ne fonctionne pas, j'ai du me planter quelque 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
     
     
    <script type="text/javascript">
     
    var ok = new Array ("Bas-Rhin","Haut-Rhin");
     
    	function departement() {
     
    		var dep = document.getElementById('re');
     
     
    		if (dep.value == "Alsace")
     
    			{
     
    			for (i=0; i<ok.length; i++)
     
    				{
     
    				document.getElementById('dep').options[i].value = ok[i];
    				document.getElementById('dep').options[i].text  = ok[i];
     
     
    				}
     
    			}
    </script>

  7. #7
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 16
    Par défaut
    Merci pour le lien
    Mais je voudrai juste savoir ce qui ne va pas (selon vous) dans mon script.. je sais j'insiste mais je pense vraiment ne pas être loin de la solution !

  9. #9
    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 : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name="regions" id="re" onchange="dep();">
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('dep')
    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

  10. #10
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    D'abord, il te manque un guillemet fermant de la fonction. Ensuite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if (dep.value == "Alsace")
     
    			{
     document.getElementById('dep').options.length = 0;
    			for (i=0; i<ok.length; i++)
     
    				{
     				document.getElementById('dep').options[i] = new Option(ok[i],ok[i]);
    				}
     
    			}
    Vérifie les id comme Bovino l'a indiqué.

    A+.

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 16
    Par défaut
    Oui désolé pour la guillemet, j'ai retapé trop rapidement le code de ma page qui lui est correct
    Je ne savais pas que c'était une erreur car ma fonction dep() est exécutée lors du onchange sur le 1er select puis cette fonction se charge d'insérer dans mon second select id="dep" les nouvelles options par l'intermédiaire de ma boucle


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('dep').options.length = 0;
    Si j'ai bien compris ce code permet d'initialiser le nombre des options du select afin de pouvoir insérer sans problème les nouvelles options quel que sois leurs nombres ?

  12. #12
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Citation Envoyé par Aloam Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    document.getElementById('dep').options.length = 0;
    Si j'ai bien compris ce code permet d'initialiser le nombre des options du select afin de pouvoir insérer sans problème les nouvelles options quel que sois leurs nombres ?
    oui.

  13. #13
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 16
    Par défaut
    Parfait merci à vous je test ca

  14. #14
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 16
    Par défaut
    Voila le script fonctionne bien !


    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
     
    <script type="text/javascript">
     
    var ok = new Array("Bas-Rhin","Haut-Rhin");
     
    	function departement() {
     
     
    		var dep = document.getElementById('re');
     
     
     
    		if (dep.value == "Alsace")
     
     
    			{
     
    	document.getElementById('dep').options.length = 0;
     
    			for (i=0; i<ok.length; i++)
     
    				{
     
    				document.getElementById('dep').options[i] = new Option(ok[i],ok[i]);
     
     
    				}
     
     
    			}
                }
     
    </script>
    Seul problème, l'unique option déjà présente dans mon second Select n’apparaît pas ..

  15. #15
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonsoir,
    Seul problème, l'unique option déjà présente dans mon second Select n’apparaît pas ..
    normal, tu la détruit à cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('dep').options.length = 0;
    si tu veux la conserver mets length à 1, ATTENTION il te faudra en tenir compte dans ta boucle for.

  16. #16
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 16
    Par défaut
    ok je te remercie j'avais essayé de mettre length=1 mais je n'avais pas modifié ma boucle for..

  17. #17
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 16
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    for (i=1; i<ok.length; i++)
    Pour que sa fonctionne, j'ai du rajouter une option factice en 1ere position au sein de mon tableau.. ^^'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    var ok = new Array("","Bas-Rhin","Haut-Rhin");
    Avec ce bricolage, ma boucle insère bien mes deux options [1] et [2] dans mon select sans "effacer" la 1ere [0] déjà inscrite

  18. #18
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Sans avoir ajouté dans le tableau, tu utilisent seulement options.length ou bien tu ajoutes 1 à l'indice de la boucle i.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var ok = new Array("Bas-Rhin","Haut-Rhin");
    ...
    for (i=0; i<ok.length; i++)
    	{
     		document.getElementById('dep').options[i+1] = new Option(ok[i],ok[i]);
     
    	}
    A+.

  19. #19
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name="regions" id="re" onchange="dep();">
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('dep')
    Comme toujous je dirais que ça ne sert à rien de rechercher des id dans la page
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name="regions" id="re"onchange="dep(this);">
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function dep(dep) {
        // cette ligne ne sert à rien vu que dep est passé en paramètre
        // var dep = document.getElementById('re');')

    A+JYT

  20. #20
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 16
    Par défaut
    Parfait tout fonctionne j'essai de finaliser mon code mais je bute sur la sélection d'une option avec "selected" :/

    J'ai testé quelques scripts mais ça ne fonctionne pas..

    J'aimerai que l'option sélectionné manuellement dans le select des départements soit toujours sélectionné au rechargement de la page, comme pour un echo 'selected="selected"' en PHP.
    Une fois la sélection faite je vais devoir récupérer la valeur afin d'effectuer mes vérifications côté serveur.

    Vous avez des idées ?

Discussions similaires

  1. Ajax 2 s:select liés
    Par tongo dans le forum Struts 2
    Réponses: 1
    Dernier message: 29/05/2011, 02h10
  2. [AJAX] Chargement select liés avec ajax sous IE
    Par alex4488 dans le forum AJAX
    Réponses: 5
    Dernier message: 07/08/2010, 22h58
  3. select liés et retour ajax
    Par pop_up dans le forum jQuery
    Réponses: 11
    Dernier message: 13/06/2010, 19h58
  4. Combinaison de deux selects simples
    Par devtrax dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/09/2004, 14h09
  5. UNION de deux SELECT avec nombre d'arguments différents
    Par orus8 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/07/2004, 14h32

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