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 :

Listes liées et nombre d'options


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Listes liées et nombre d'options
    Bonjour,

    J'ai un problème entre HTML5 et Javascript.
    J'ai deux select/option qui se suivent et s'influencent. :
    - le premier de trois éléments me donne le choix sur trois tableaux différents et de nombre d'élément eux aussi différents.
    - le second est donc déduit du premier et me donne le choix sur des liste de 6 ou 5 éléments.

    Si je choisis "armes_de_guerre", la seconde liste me donne 5 choix.
    Je change et choisis "armes_courantes", la seconde liste me donne 6 choix.
    Je rechange et choisis "armes_exotiques", la seconde liste me donne 6 choix au lieu des 5 attendus. En faite c'est le 6ème choix de "armes_de_guerre" qui s'incruste.

    Comment faire pour l'enlever ?


    HTML
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <h2 id="label_famille_arme_I">FAMILLE</h2> 
    <h2 id="label_famille_arme_b_I">D'ARME</h2> 
    <select id="famille_arme_I" name="famille_arme" onChange="choixFamilleArme()">
        <option></option>
        <option value="armes_courantes">Armes courantes</option>
        <option value="armes_de_guerre">Arme de guerre</option>
        <option value="armes_exotiques">Arme exotiques</option>
    </select>
    <h2 id="label_maniement_arme_I">MANIEMENT</h2> 
    <select id="maniement_arme_I" name="maniement_arme" onChange="choixManiementArme()"></select>


    Javascript
    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
    function choixFamilleArme() {
        var armes_courantes = new Array();
        var armes_de_guerre = new Array();
        var armes_exotiques = new Array();
        armes_courantes = ["","Combat à mains nues","Armes légères","Armes à une main","Armes à deux mains","Armes à distante"];
        armes_de_guerre = ["","Armes légères","Armes à une main","Armes à deux mains","Armes à distante"];
        armes_exotiques = ["","Armes légères","Armes à une main","Armes à deux mains","Armes à distante"];
        switch(document.form.famille_arme_I.value) {
    	case "armes_courantes" :
    		for (var nombElement = 0; nombElement < armes_courantes.length; nombElement++) {
    			document.form.maniement_arme_I.options[nombElement] = 
                            new option(armes_courantes[nombElement],armes_courantes[nombElement]);
    		};
    		break;
    	case "armes_de_guerre" :
    		for (var nombElement = 0; nombElement < armes_de_guerre.length; nombElement++) {
    			document.form.maniement_arme_I.options[nombElement] = 
                            new Option(armes_de_guerre[nombElement],armes_de_guerre[nombElement]);
    		};
    		break;
    	case "armes_exotiques" :
    		for (var nombElement = 0; nombElement < armes_exotiques.length; nombElement++) {
    			document.form.maniement_arme_I.options[nombElement] = 
                            new Option(armes_exotiques[nombElement],armes_exotiques[nombElement]);
    		};
    		break;
    	}
    }
    J'attends votre aide.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    Bonjour,

    ça marchera peut-être en réinitialisant la liste ou supprimant le dernier élément :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    document.getElementById("maniement_arme_I").length = 0;  
    ou
    document.form.maniement_arme_I.options[document.form.maniement_arme_I.length-1] = null;
    document.form.maniement_arme_I.size=document.form.maniement_arme_I.size-1;
    C'est pour du D&D / Pathfinder ?
    Christophe

    Pensez à mettre quand c'est le cas.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    En réinitialisant cela marche.

    Merci pour ton aide.

    C'est pour du D&D 3.5.

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

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Ceci dit, ton code est largement optimisable...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function choixFamilleArme() {
        var armes = {
            armes_courantes: ["","Combat à mains nues","Armes légères","Armes à une main","Armes à deux mains","Armes à distante"],
            armes_de_guerre: ["","Armes légères","Armes à une main","Armes à deux mains","Armes à distante"],
            armes_exotiques: ["","Armes légères","Armes à une main","Armes à deux mains","Armes à distante"]
        }
        var arme = armes[document.form.famille_arme_I.value];
        var listeArme = document.getElementById("maniement_arme_I");
        listeArme.length = 0;
        for(var i = 0; i < arme.length; i++){
            listeArme.options[i] = new option(arme[i],arme[i]);
        }
    }
    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

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/07/2014, 20h08
  2. Nombre d options a afficher dans une liste (select)
    Par wwluigi dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 16/01/2007, 15h17
  3. [MySQL] 1 table et 2 listes liées
    Par Ekik dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 07/02/2006, 16h47
  4. XMLHTTPRequest et listes liées
    Par ben23 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 31/12/2005, 16h32
  5. Problème avec listes liées entre elles et bouton "précé
    Par Oluha dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/08/2005, 15h10

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