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 :

Controler le nombre d'options choisies d'un select


Sujet :

JavaScript

  1. #1
    Membre averti Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Points : 448
    Points
    448
    Par défaut Controler le nombre d'options choisies d'un select
    Bonjour,
    Le javascript, c'est pas vraiment mon fort, alors je viens vous demander de l'aide pour cette petite chose.
    Je dois mettre un controle sur un select afin de s'assurer qu'un utilisateur a choisi au moins 3 options. Voici le code :
    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
    function verif_menu() 
    { 
        var nb = 0; 
        for(i=0;i<36;i++) 
        { 
            if(document.form.id_menu.options[i].selected) 
            { 
                nb ++; 
            } 
        }
            if(nb < 3) 
            { 
                alert('Vous avez sélectionné ' + nb + ' menu(s). Selectionnez au moins 3 menus');
                return (false); 
            }      
    }
    .. mais ça ne marche pas, du moins sur une des pages ou je l'ai mise parcque j'ai mis exactement le meme code sur une autre page et elle marche parfaitement. Mais là non, le test n'est pas effectué et IE me donne cette erreur :
    'document.form.id_menu.options' a la valeur NULL ou n'est pas un objet.

    le <form> a l'attribut name="form" , et le select name="id_menu[]".

    Merci d'avance pour votre aide
    mais pourquoi tu cours?

  2. #2
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    bonjour,

    le <form> a l'attribut name="form" , et le select name="id_menu[]".

    essaye comme ceci :
    et dans le script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.MaForme.id_menu.
    voici un exemple de ce que tu peux faire : ce script récupère, lors du clic sur le bouton, les options cochées.


    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
    <html>
    <head>
    <title></title>
     
    <script type="text/javascript">
    <!--
    function MaListe()
    {
     var liste = document.getElementById("combo");
     var i, texte, n;
     
     texte = "";
     n=0;
     for (i=0; i<liste.options.length; i++)
     {
         if (liste.options[i].selected)
         {
            texte = texte + "n°" + i + " : " + liste.options[i].value + "\n";
          }
     }
     
     alert(n+"\n"+texte);
    }
     
    //-->
    </script>
     
    </head>
     
    <body>
    <select multiple="multiple" size="6" id="combo">
        <option value="valeur 0">-- Option 0 --</option>
        <option value="valeur 1">-- Option 1 --</option>
        <option value="valeur 2">-- Option 2 --</option>
        <option value="valeur 3">-- Option 3 --</option>
        <option value="valeur 4">-- Option 4 --</option>
        <option value="valeur 5">-- Option 5 --</option>
        <option value="valeur 6">-- Option 6 --</option>
        <option value="valeur 7">-- Option 7 --</option>
    </select>
    <input type="button" value="Bouton" name="BNom" onclick="MaListe()">
     
    <br><br>
     
     
    </body>
     
    </html>

  3. #3
    Membre émérite
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Points : 2 814
    Points
    2 814
    Par défaut
    document.forms[0].elements["id_menu[]"].options
    :

  4. #4
    Membre averti Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Points : 448
    Points
    448
    Par défaut
    [quote="Auteur"]bonjour,

    pour le select, je suis obligé de lui mettre comme nom id_menu[] , avec les crochets parce que c'est un select multiple, et pour pouvoir traiter les sélection en php derrière, il me faut les crochets.
    mais pourquoi tu cours?

  5. #5
    Membre averti Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Points : 448
    Points
    448
    Par défaut
    merci particulièrement à Auteur parce que la fonction qu'il m'a donnée m'a aidé...
    Pour ceux que ça intéresse:

    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
    function verif_menu() 
    { 
        var nb = 0; 
        for(i=0;i<36;i++) 
        { 
            if(document.getElementById("id_menu").options[i].selected) 
            { 
                nb ++; 
            } 
        }
            if(nb < 3) 
            { 
                alert('Vous avez sélectionné ' + nb + ' menu(s). Selectionnez au moins 3 menus');
                return (false); 
            }      
    }
    cCela dit, ça ne m'explique toujours pas comment ça se fait que ça marche sur une page et pas l'autre (memes éléments HTML traités, mêmes noms), mais ça fonctionne c'est dejà ça.

    Merci.
    mais pourquoi tu cours?

  6. #6
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    plutôt que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(i=0;i<36;i++)
        {
            if(document.getElementById("id_menu").options[i].selected)
            {
                nb ++;
            }
        }
    je préfère ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var element= document.getElementById("id_menu");
     
    for(i=0;i<element.options.length;i++)
        {
            if(element.options[i].selected)
            {
                nb ++;
            }
        }
    comme ça si le nombre d'options de la liste change, tu n'as pas à modifier la valeur max de i (fixée à 36 dans ton code) et tu allèges la condition if.

  7. #7
    Membre actif
    Homme Profil pro
    PDG
    Inscrit en
    Septembre 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : PDG
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2005
    Messages : 101
    Points : 225
    Points
    225
    Par défaut
    Je dirais même mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    var element= document.getElementById("id_menu");
    var nel = element.options.length;
     
    for(i=0;i<nel;i++)
        {
            if(element.options[i].selected)
            {
                nb ++;
            }
        }
    Ca évite d'avoir à calculer le nombre d'éléments à chaque itération

  8. #8
    Membre averti Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Points : 448
    Points
    448
    Par défaut
    ok, effectivement c'etait un peu bete, enfin pas tres intellgient en tout cas de fixer cette valeur...

    Ce que vous me proposez marche nickel, merci.

    ++
    mais pourquoi tu cours?

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

Discussions similaires

  1. Nombre d'options affichées dans un select
    Par 4R416N33 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 23/09/2008, 10h39
  2. comment récupérer l'option choisie avec html:select
    Par fakhita dans le forum Struts 1
    Réponses: 18
    Dernier message: 24/07/2007, 17h08
  3. Comptage du nombre d'option
    Par licorne dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 10/03/2006, 10h50
  4. controler le nombre d'enregistrement
    Par jonny dans le forum MFC
    Réponses: 7
    Dernier message: 25/05/2005, 14h11
  5. Controler un nombre de processus identiques.
    Par ditfau6 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 24/05/2004, 16h21

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