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 :

Faire des SELECT dynamiques


Sujet :

JavaScript

  1. #1
    Membre du Club
    Homme Profil pro
    Chargé d'études informatiques
    Inscrit en
    Avril 2019
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Chargé d'études informatiques
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2019
    Messages : 55
    Points : 41
    Points
    41
    Par défaut Faire des SELECT dynamiques
    Bonjour,

    Je suis en train de développer un site web et dans un formulaire j'aimerai avoir 3 select avec tous les mêmes options mais j'aimerai pouvoir faire en sorte que quand l'utilisateur choisi une option dans l'un de ces 3 selects, elle soit supprimée des 2 autres afin d'éviter les doublons.
    Quelqu'un saurait il m'aider sur la façon de faire ? J'ai vu qu'en Ajax on pouvait faire en sorte de supprimer des options mais je ne sais pas comment m'y prendre pour savoir quel serait le déclancheur, surtout que si l'utilisateur change d'avis, j'aimerai que l'option réapparaisse dans le formulaire

    Merci d'avance pour votre aide!

  2. #2
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 467
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 467
    Points : 4 656
    Points
    4 656
    Par défaut
    j'ai trouve l'exercice sympas : voici ma copie

    Code javascript : 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
    const items = ['-----', 'toto', 'tata', 'titi', 'a', 'b', 'c'];
    function populateList(n) {
        const sel = document.createElement('select');
        sel.id = `select_${n}`;
        sel.name = `select_${n}`;
        sel.dataset.listNumber = n;
        items.forEach(el => {
            const opt = document.createElement('option');
            opt.textContent = el;
            opt.value = el;
            sel.appendChild(opt);
        });
        document.body.appendChild(sel);
        sel.addEventListener('change', updateOtherLists);
    }
    function updateOtherLists() {
        let sel;
        try {
            sel = document.getElementById(`select_${parseInt(this.dataset.listNumber)+1}`);
            if(!sel) {
                throw 'element doesn t exist';
            }
        } catch (e) { return false; }
        sel.options.length = 0;
        for(let i=0; i<this.options.length; ++i) {
            el = this.options[i].value;
            if(el !== this.value) {
                const opt = document.createElement('option');
                opt.textContent = el;
                opt.value = el;
                sel.appendChild(opt);
            }
        }
    }
    populateList(1);
    populateList(2);
    populateList(3);

    ps : l'ajax sert a recuperer un retour du serveur... je ne sais pas si c'est que ce tu voulais pour ton exercice

  3. #3
    Membre du Club
    Homme Profil pro
    Chargé d'études informatiques
    Inscrit en
    Avril 2019
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Chargé d'études informatiques
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2019
    Messages : 55
    Points : 41
    Points
    41
    Par défaut
    Merci pour votre réponse !

    Auriez vous par hasard le code HTML qui va avec votre script que je puisse le tester afin de l'adapter à mon code s'il vous plait ?

  4. #4
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 467
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 467
    Points : 4 656
    Points
    4 656
    Par défaut
    pas besoin de html, je le cree a la volee directement dans le script

  5. #5
    Membre du Club
    Homme Profil pro
    Chargé d'études informatiques
    Inscrit en
    Avril 2019
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Chargé d'études informatiques
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2019
    Messages : 55
    Points : 41
    Points
    41
    Par défaut
    Pourtant quand je met votre code sur une page, celle-ci ne m'affiche rien

  6. #6
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 467
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 467
    Points : 4 656
    Points
    4 656
    Par défaut
    le html se rajoute au body (a la fin de la page)

    voici ma page test complete
    Code html : 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
    <!DOCTYPE html>
    <html lang="fr">
    <head>
      <meta charset="utf-8">
      <title>selects</title>
    </head>
    <body>
        <script type="text/javascript">
    const items = ['-----', 'toto', 'tata', 'titi', 'a', 'b', 'c'];
    function populateList(n) {
        const sel = document.createElement('select');
        sel.id = `select_${n}`;
        sel.name = `select_${n}`;
        sel.dataset.listNumber = n;
        items.forEach(el => {
            const opt = document.createElement('option');
            opt.textContent = el;
            opt.value = el;
            sel.appendChild(opt);
        });
        document.body.appendChild(sel);
        sel.addEventListener('change', updateOtherLists);
    }
    function updateOtherLists() {
        let sel;
        try {
            sel = document.getElementById(`select_${parseInt(this.dataset.listNumber)+1}`);
            if(!sel) {
                throw 'element doesn t exist';
            }
        } catch (e) { return false; }
        sel.options.length = 0;
        for(let i=0; i<this.options.length; ++i) {
            el = this.options[i].value;
            if(el !== this.value) {
                const opt = document.createElement('option');
                opt.textContent = el;
                opt.value = el;
                sel.appendChild(opt);
            }
        }
    }
    populateList(1);
    populateList(2);
    populateList(3);
        </script>
    </body>
    </html>

  7. #7
    Membre du Club
    Homme Profil pro
    Chargé d'études informatiques
    Inscrit en
    Avril 2019
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Chargé d'études informatiques
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2019
    Messages : 55
    Points : 41
    Points
    41
    Par défaut
    Rebonsoir !
    Apres de moultes réflexions j'ai fini par trouver la solution par moi même ! je vous la transmet au cas où quelqu'un serait intéressé :p
    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
     
    var lastsp1, lastsp2, lastsp3;
     
    document.getElementById('sp1Select').addEventListener('change', function (e){
    	if(lastsp1 != null){
    		document.getElementById('sp2Select').options[lastsp1].style.display = 'contents'
    		document.getElementById('sp3Select').options[lastsp1].style.display = 'contents' 
    	}
     
    	var x = document.getElementById('sp1Select').selectedIndex;
     
    	document.getElementById('sp2Select').options[x].style.display = 'none';
    	document.getElementById('sp3Select').options[x].style.display = 'none';
    	lastsp1 = x;
     
    }) 
     
    document.getElementById('sp2Select').addEventListener('change', function (e){
    	if(lastsp2 != null){
    		document.getElementById('sp1Select').options[lastsp2].style.display = 'contents'
    		document.getElementById('sp3Select').options[lastsp2].style.display = 'contents' 
    	}
     
    	var x = document.getElementById('sp2Select').selectedIndex;
     
    	document.getElementById('sp1Select').options[x].style.display = 'none';
    	document.getElementById('sp3Select').options[x].style.display = 'none';
    	lastsp2 = x;
     
    }) 
     
    document.getElementById('sp3Select').addEventListener('change', function (e){
    	if(lastsp3 != null){
    		document.getElementById('sp1Select').options[lastsp3].style.display = 'contents'
    		document.getElementById('sp2Select').options[lastsp3].style.display = 'contents' 
    	}
     
    	var x = document.getElementById('sp3Select').selectedIndex;
     
    	document.getElementById('sp1Select').options[x].style.display = 'none';
    	document.getElementById('sp2Select').options[x].style.display = 'none';
    	lastsp3 = x;
     
    })
    Merci encore de m'avoir aidé

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

Discussions similaires

  1. Faire des combobox dynamiques
    Par lordatef dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 19/09/2011, 22h03
  2. Réponses: 5
    Dernier message: 07/07/2009, 11h00
  3. [MySQL] faire un select dynamique
    Par keithsize dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/06/2009, 18h24
  4. faire des boutons dynamiques
    Par gotcha007 dans le forum Flash
    Réponses: 4
    Dernier message: 21/01/2007, 11h21
  5. Une solution pour faire des enums dynamique ?
    Par n!co dans le forum Langage
    Réponses: 7
    Dernier message: 16/12/2006, 14h44

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