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 :

Coloriser les options d'un select


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Femme Profil pro
    �tudiant
    Inscrit en
    Novembre 2018
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 26
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 3
    Par d�faut Coloriser les options d'un select
    Salut � tous, je vous expose mon probl�me. Je travaille actuellement sur une page o� lorsqu'on passe notre curseur sur des options (sachant que j'ai +50 options) j'aimerai savoir comment les color� le fond en gris juste au passage du curseur. J'ai tent� de multiple chose mais sans aboutissement:

    la partie du Code html:
    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
    <select id="test" multiple name="monday[]">
        <option value="1"></option>
        <option value="2"></option>
        <option value="3"></option>
        <option value="4"></option>
        <option value="5"></option>
        <option value="6"></option>
        <option value="7"></option>
        <option value="8"></option>
        <option value="9"></option>
        <option value="10"></option>
        <option value="11"></option>
        <option value="12"></option>
        <option value="13"></option>
        <option value="14"></option>
        <option value="15"></option>
        <option value="16"></option>
        <option value="17"></option>
        <option value="18"></option>
        <option value="19"></option>
        <option value="20"></option>
        </select> </div>

    Code javascript:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    var aza = document.getElementsById('test');
     
        aza.addEventListener("mouseover", function(){
        highlight(aza.style.backgroundColor = "grey";
        });
    Je pense que je n'arrive pas � ajouter un �couteur d��l�ment � tous les �l�ments option . (ici highlight est la fonction qui doit colorer les fonds)
    Merci

    Pi�ce jointe 427195

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par d�faut
    Bonjour,

    Ce serait plus simple � faire avec du CSS alors pourquoi utiliser du JS juste pour �a ?

    EDIT :

    Ah oui c'est vrai que dans une discussion r�cente on a vu que certains pensent qu'on est limit� pour ce qui de personnaliser les options (ajout d'une class et de style CSS) mais en fait j'ai post� ici #128 un exemple qui montre qu'on peut personnaliser plusieurs choses quand m�me et voici le lien pour tester : https://jsbin.com/retuhuqesi/1/edit?html,output
    C'est facile de l'adapter pour faire ce que vous voulez...

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par d�faut
    Citation Envoy� par Kalix Voir le message
    Je pense que je n'arrive pas � ajouter un �couteur d��l�ment � tous les �l�ments option . (ici highlight est la fonction qui doit colorer les fonds)
    M�me si on utilise du JS pour faire cela il serait judicieux de ne pas ajouter un �couteur � toutes les options (surtout si il y en a beaucoup) on peut utiliser la d�l�gation (un seul �couteur sur le select)...

    Mais voici un exemple avec le CSS : https://jsbin.com/togekiwaqe/edit?html,output

    Voici le code :

    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
    49
    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width">
        <title>Model</title>
        <link rel="stylesheet" href="style.css">
        <style>
          #test option:hover {
            background-color: grey;
          }
     
          #test {
            width: 150px
          }
        </style>
      </head>
     
      <body>
     
        <div>
          <select id="test" size="21" multiple name="monday[]">
            <option value="1">option 1 </option>
            <option value="2">option 2 </option>
            <option value="3">option 3 </option>
            <option value="4">option 4 </option>
            <option value="5">option 5 </option>
            <option value="6">option 6 </option>
            <option value="7">option 7 </option>
            <option value="8">option 8 </option>
            <option value="9">option 9 </option>
            <option value="10">option 10 </option>
            <option value="11">option 11 </option>
            <option value="12">option 12 </option>
            <option value="13">option 13</option>
            <option value="14">option 14 </option>
            <option value="15">option 15 </option>
            <option value="16">option 16 </option>
            <option value="17">option 17 </option>
            <option value="18">option 18 </option>
            <option value="19">option 19 </option>
            <option value="20">option 20 </option>
          </select> 
        </div>
     
     
      </body>
     
    </html>

    C'est simple et court...

  4. #4
    Candidat au Club
    Femme Profil pro
    �tudiant
    Inscrit en
    Novembre 2018
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 26
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 3
    Par d�faut
    Merci de votre r�ponse mais dans cette exo, je suis oblig� d'utiliser du js pour �a

  5. #5
    Membre extr�mement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par d�faut
    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
    49
    50
    51
    52
    53
    54
    55
    <!DOCTYPE html>
    <html lang="fr">
    <head>
      <meta charset="UTF-8">
      <title> Option hover en js </title>
      <style>
        div { margin: 30px}
        #test { width: 150px; }
        #test > option { text-align: center }
      </style>
      <script>
        function JS_inits() {
          document.querySelectorAll('#test > option').forEach( function(elm) {
            elm.addEventListener('mouseover',highlight,false);
          })
     
          function highlight(e) {
            this.style.backgroundColor = "grey";
            setTimeout( function(that) {
              that.style.backgroundColor = "transparent";  // ben sinon ça reste... 
            },200, this);
          }
        }; // JS_inits()
      </script>
    </head>
     
    <body onload="JS_inits();">
     
        <div>
            <select id="test" size="20" multiple name="monday[]">
              <option value="1">option 1 </option>
              <option value="2">option 2 </option>
              <option value="3">option 3 </option>
              <option value="4">option 4 </option>
              <option value="5">option 5 </option>
              <option value="6">option 6 </option>
              <option value="7">option 7 </option>
              <option value="8">option 8 </option>
              <option value="9">option 9 </option>
              <option value="10">option 10 </option>
              <option value="11">option 11 </option>
              <option value="12">option 12 </option>
              <option value="13">option 13</option>
              <option value="14">option 14 </option>
              <option value="15">option 15 </option>
              <option value="16">option 16 </option>
              <option value="17">option 17 </option>
              <option value="18">option 18 </option>
              <option value="19">option 19 </option>
              <option value="20">option 20 </option>
            </select> 
          </div>
     
    </body>
    </html>

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par d�faut
    Ah ok ce sont les consignes qui vous impose cela (c'est dommage de ne pas utiliser la d�l�gation dans ce cas).

    Ok alors voici un code qui respecte les consignes :

    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
    49
    50
    51
    52
    53
    54
    <!DOCTYPE html>
    <html>
     
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width">
        <title>Version avec JS</title>
     
    </head>
     
    <body>
     
        <div>
            <select id="test" size="21" multiple name="monday[]">
                <option value="1">option 1 </option>
                <option value="2">option 2 </option>
                <option value="3">option 3 </option>
                <option value="4">option 4 </option>
                <option value="5">option 5 </option>
                <option value="6">option 6 </option>
                <option value="7">option 7 </option>
                <option value="8">option 8 </option>
                <option value="9">option 9 </option>
                <option value="10">option 10 </option>
                <option value="11">option 11 </option>
                <option value="12">option 12 </option>
                <option value="13">option 13</option>
                <option value="14">option 14 </option>
                <option value="15">option 15 </option>
                <option value="16">option 16 </option>
                <option value="17">option 17 </option>
                <option value="18">option 18 </option>
                <option value="19">option 19 </option>
                <option value="20">option 20 </option>
            </select> </div>
     
        <script>
            var allOptions = document.querySelectorAll('#test > option') // récupère toutes les options du select #test
     
            for (var i = 0; i < allOptions.length; i++) {
                allOptions[i].addEventListener('mouseover', highlight);
            }
     
            function highlight() {
     
                for (var i = 0; i < allOptions.length; i++) {
                    allOptions[i].style.backgroundColor = "white"; // rétabli la couleur de fond par défaud
                }
                this.style.backgroundColor = "lightgray";
            }
        </script>
    </body>
     
    </html>

    Le code est volontairement simple (j'utilise une boucle for alors que ce serait plus concis avec un forEach utilis�e par psychadelic).

    Ah oui j'ai oubli� le lien : vous pouvez tester ici : https://jsbin.com/quduxageme/edit?html,output le code post� dans mon message pr�c�dent...

  7. #7
    Invit�
    Invit�(e)
    Par d�faut
    Bonjour,

    Il n'y a pas besoin de JavaScript pour �a.
    Ca se fait tr�s bien en CSS :

    Code css : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    select option:hover {
      background:lightgrey;
      color:darkblue;
      font-weight:bold;
    }

    [EDIT]
    Citation Envoy� par Kalix Voir le message
    Merci de votre r�ponse mais dans cette exo, je suis oblig� d'utiliser du js pour �a
    Oups, je n'avais pas vu...
    Derni�re modification par Invit� ; 15/11/2018 � 16h52.

  8. #8
    Invit�
    Invit�(e)
    Par d�faut
    @Beginner.
    Oui, j'ai d�j� vu ton code.

    Une remarque :
    1- en plus de la classe "selectionned", il faut aussi ajouter selected="selected" (dans ton script JS).
    2- et mettre <select.... multiple="multiple">.

    Sinon, si le formulaire doit �tre post� ensuite (et r�ceptionn� en PHP avec $_POST, par exemple), on ne r�cup�rera pas les options choisies...
    Derni�re modification par Invit� ; 15/11/2018 � 16h53.

  9. #9
    Membre actif
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Novembre 2018
    Messages
    16
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 28
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Novembre 2018
    Messages : 16
    Par d�faut
    Bonjour,

    J'ai ce code pour toi, le probl�me c'est que je suis sous Ubuntu => Firefox et que je ne peu pas personnaliser mes balises option ;(
    Par cons�quence je ne suis pas s�r que cela fonctionne.

    Juste pour info, modifier les balises option est tr�s difficile suivant les navigateurs et les syst�me d'exploitations.

    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
    <!DOCTYPE html>
    <html lang="fr" dir="ltr">
      <head>
          <meta charset="utf-8">
          <title>Test.fr - ColorOptionSelect</title>
      </head>
      <body>
          <select name="test">
              <option value="1">1</option>
              <option value="2">2</option>
              <option value="3">3</option>
              <option value="4">4</option>
              <option value="5">5</option>
              <option value="6">6</option>
              <option value="7">7</option>
              <option value="8">8</option>
              <option value="9">9</option>
              <option value="10">10</option>
          </select>
      </body>
      <script>
            let elem=document.querySelectorAll('select[name="test"] option');
        for(let i=0;i<elem.length;i++){
          elem[i].addEventListener('mouseover',function(e){e.target.style.backgroundColor='grey';});
          elem[i].addEventListener('mouseout',function(e){e.target.style.backgroundColor='initial';});}
      </script>
    </html>

    PS: c'est la premi�re fois que j'utilise la balise CODE
    J'ai regard� la pr�visualisation, �a rend bien.

  10. #10
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par d�faut
    Citation Envoy� par jreaux62 Voir le message
    @Beginner.

    Oui, j'ai d�j� vu ton code.

    Une remarque :
    1- en plus de la classe "selectionned", il faut aussi ajouter selected="selected" (via ton script JS).
    2- et mettre <select.... multiple="multiple">.

    Sinon, si le formulaire doit �tre post� ensuite (et r�ceptionn� en PHP avec $_POST, par exemple), on ne r�cup�rera pas les options choisies...
    Oui j'avais fait expr�s de faire �a comme �a pour supprimer la surbrillance par d�faut (fond bleu et couleur blanche) mais pour faire ce que tu dis on pourrait ajouter une fonction qui mette en "selected" toutes les options s�lectionn�es juste avant de poster le formulaire, ce n'est pas long � faire, juste un forEach...

  11. #11
    Candidat au Club
    Femme Profil pro
    �tudiant
    Inscrit en
    Novembre 2018
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 26
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 3
    Par d�faut
    @Beginner j'ai toujours un petit probl�me, puis-je t'en faire par en message priv� ?

  12. #12
    Membre extr�mement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par d�faut
    Il y a aussi cette solution...
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
          var Options_Hightlighted = new Array();
     
          document.querySelectorAll('#test > option').forEach( function(elm) {
            elm.addEventListener('mouseover',highlight,false);
          });
     
          function highlight(e)  {
            while ((elm = Options_Hightlighted.pop()) != null )  elm.style.backgroundColor = "transparent";  
            this.style.backgroundColor = "grey";
            Options_Hightlighted.push(this);
          };

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Alignement de variables dans les <option> d'un <select>
    Par Crowell dans le forum Balisage (X)HTML et validation W3C
    R�ponses: 3
    Dernier message: 18/07/2007, 17h42
  2. changer les options d'un select
    Par shinrei dans le forum G�n�ral JavaScript
    R�ponses: 7
    Dernier message: 26/07/2006, 16h08
  3. comment R�cup�r� tous les options d'un select ?
    Par maximenet dans le forum G�n�ral JavaScript
    R�ponses: 4
    Dernier message: 24/03/2006, 15h59
  4. r�cup�rer toutes les Options d'1 select
    Par javaSudOuest dans le forum G�n�ral JavaScript
    R�ponses: 7
    Dernier message: 07/12/2005, 08h37
  5. cacher les options d'un select
    Par soony dans le forum G�n�ral JavaScript
    R�ponses: 3
    Dernier message: 07/09/2005, 10h05

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