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 changer le style d'un élément avec un select


Sujet :

JavaScript

  1. #1
    Membre du Club
    Homme Profil pro
    Particulier
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Particulier

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Points : 49
    Points
    49
    Par défaut Faire changer le style d'un élément avec un select
    Bonjour.

    Je débute en JavaScript, et je cherche à faire changer le style d'un élément avec l'aide d'un select.
    Voici un exemple :
    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
    <!doctype html>
    <html>
      <head>
        <meta charset="utf-8" />
    	<link rel="stylesheet" href="styles.css" />
        <title>[JS] Faire changer le style d'un élément</title>
      </head>
     
      <body>
     
      <form name="afficher_image">
    	<select onmouseup="afficher_img()" name="select">
    		<option value="black" selected="selected">Noir</option>
    		<option value="red">Rouge</option>
    	</select>
    	<input type="text" name="checker" />
      </form>
     
      <div id="myDIV">
      Lorem ipsum dolor sit amet. Amo P...
      </div>
     
      <script>
                    function afficher_img()
                    {
                            afficher_image.checker.value = afficher_image.select.value;
                            var affichage = afficher_image.select.value;
                            
                            document.getElementsById("myDIV").style.color = affichage;
                    }
            </script>
     </body>
    </html>

    Sauf que si ça fonctionnait... Je ne serai pas là pour en parler :p !
    Bon Dimanche, et merci !

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    oubli l'événement onmouseup sur le SELECt, préfères lui onchange.

    Quant à ta fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function afficher_img() {
      afficher_image.checker.value = afficher_image.select.value;
      var affichage = afficher_image.select.value;
     
      document.getElementsById("myDIV").style.color = affichage;
    }
    je te laisse la relire pour voir la multitude de choses qui ne vont pas.


    ...la correction rapide...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function afficher_img() {
    //  afficher_image.checker.value = afficher_image.select.value;
      var affichage = afficher_image.select.value;
    
      document.getElementById("myDIV").style.color = affichage;
    }

  3. #3
    Membre du Club
    Homme Profil pro
    Particulier
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Particulier

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Points : 49
    Points
    49
    Par défaut
    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
    <!doctype html>
    <html>
    <!-- [...] -->
      <body>
     
      <form name="afficher_image">
    	<select onchange="afficher_img()" name="select">
    		<option value="0" selected="selected">Noir</option>
    		<option value="1">Rouge</option>
    	</select>
    	<input type="text" name="checker" />
      </form>
     
      <div id="myDIV">
    	Lorem ipsum dolor sit amet. Amo P...
      </div>  
    	<script>
    		function afficher_img()
    		{
    			afficher_image.checker.value = afficher_image.select.value;
    			var affichage = afficher_image.select.value;
     
    			document.getElementById("myDIV").style.color = affichage;
    		}
    	</script>
     </body>
    </html>
    Ca ne marche toujours pas...

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Ca ne marche toujours pas...
    on va dire que c'est un peu normal, tu as modifié les value de tes OPTIONs en leurs mettant des valeurs qui ne sont pas reconnu comme couleur.

    Le point qui reste important à aborder est la façon dont tu récupères les références à tes différents objets, FORM et INPUT.

    Je t'engage à lire Comment accéder aux éléments d'un formulaire ? et par la même la concernant les Formulaires

  5. #5
    Membre du Club
    Homme Profil pro
    Particulier
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Particulier

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Points : 49
    Points
    49
    Par défaut
    (facepalm)... C'est vrai que vu comme ça... Merci, en tout cas !
    Mais maintenant, j'aimerai faire ça, mais par balise et non plus par id.
    Ce que j'ai fait : http://codepen.io/anon/pen/ilzBs.

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    si l'on reprend la fonction que tu utilises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function afficher_img()
    {
    	var affichage = document.forms['afficher_image'].elements['select'].value;
    	document.getElementsTagName(div).style.color = affichage;
    }
    on constate beaucoup trop d'erreurs dans celle ci
    - getElementsTagName, cette méthode n'existe pas mais il existe getElementsByTagName
    - la méthode getElementsByTagName retourne une liste d'éléments, il te faut donc boucler sur les éléments retournés
    - le paramètre que tu passes, div, est considéré comme une variable

  7. #7
    Membre du Club
    Homme Profil pro
    Particulier
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Particulier

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Points : 49
    Points
    49
    Par défaut
    Ouais, mais... Enfin, je ne comprends pas. Comment sont nommés les élement retourner par getElementsByTagName ?

  8. #8
    Membre habitué
    Homme Profil pro
    Développeur Junior
    Inscrit en
    Septembre 2011
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Septembre 2011
    Messages : 170
    Points : 177
    Points
    177
    Par défaut
    Je ne sais pas si j'ai bien saisi ta question, mais GetElementByTagName retourne les éléments portant le nom de balise que tu as donné.
    Le plus simple est de passer par les id si tu veux cibler un élément ciblé.

  9. #9
    Membre du Club
    Homme Profil pro
    Particulier
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Particulier

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Points : 49
    Points
    49
    Par défaut
    Par id, c'est bien, mais ça serait pour plusieurs éléments...
    Et ce que je voulais dire, c'est : comment est ce que getElementsByTageName renvoie les éléments ? Dans un array ? Je demande pour savoir comment mettre ça dans une boucle.

  10. #10
    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 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Et depuis hier soir, tu n'as pas été capable de taper getElementsByTagName dans Google pour te renseigner ?
    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

  11. #11
    Membre du Club
    Homme Profil pro
    Particulier
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Particulier

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Points : 49
    Points
    49
    Par défaut
    Je l'ai naturellement fais, avant même de penser à poster ici. Cependant je n'ai jamais fais de JavaScript auparavant, et donc, je ne comprends pas vraiment tout ce qui est dit à propos de getElementsByTagName. Désolé.

  12. #12
    Membre habitué
    Homme Profil pro
    Développeur Junior
    Inscrit en
    Septembre 2011
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Septembre 2011
    Messages : 170
    Points : 177
    Points
    177
    Par défaut
    J'ai ici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var cells = document.getElementsByTagName("td");
    for (var i = 0; i < cells.length; i++) { 
    status = cells[i].getAttribute("status"); 
        if ( status == "open") { 
            // récupère les données 
        }
    }
    liste = element.getElementsByTagName(balise)
    liste est une liste de nœuds contenant les éléments trouvés

  13. #13
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 386
    Points : 3 531
    Points
    3 531
    Billets dans le blog
    1
    Par défaut
    X260SH, tu t'en sort ?
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  14. #14
    Membre du Club
    Homme Profil pro
    Particulier
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Particulier

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Points : 49
    Points
    49
    Par défaut
    J'essaye de comprendre ce que représente 'length' et 'status' dans l'exemple que l'on m'a donné. Pouvez-vous l'éclairer ?

  15. #15
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 386
    Points : 3 531
    Points
    3 531
    Billets dans le blog
    1
    Par défaut
    Voici un explication détaillé.

    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
     <form name="afficher_image">
        <select onchange="afficher_img()" name="select">
            <option value="blue" selected="selected">Bleu</option>
            <option value="red">Rouge</option>
        </select>
    </form>
     
      <div class="mes_divs">
        Lorem ipsum dolor sit amet. Amo P...
      </div>  
      <div class="mes_divs">
        Lorem ipsum dolor sit amet. Amo P...
      </div>  
      <div class="mes_divs">
        Lorem ipsum dolor sit amet. Amo P...
      </div>  
      <div class="mes_divs">
       Lorem ipsum dolor sit amet. Amo P...
      </div>

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function afficher_img(){
    // on affecte à la variable affichage l'option sélectionné dans le select. 
        var affichage = document.forms['afficher_image'].elements['select'].value;
    // getElementsByClassName permet de sélectionner tout les éléments html d'une class particulière. 
    // ici on affecte à la variable cells tous les éléments avec la class mes_divs 
        var cells = document.getElementsByClassName("mes_divs");
     
    // on fait une boucle sur chaque élément de la variable cells 
        for (var i = 0; i < cells.length; i++) { 
        cells[i].style.color = affichage; // Pour chaque éléments on change ça couleur avec le contenu de la variable affichage 
        }
    }


    • .length permet de connaitre la taille d'un tableau.
    • for (var i = 0; i < cells.length; i++) cette ligne équivaut à dire, "incrémente la variable i de 0 à la taille du tableau cells"


    http://codepen.io/anon/pen/ufIeh/

    Est ce que tout est claire ?
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  16. #16
    Membre du Club
    Homme Profil pro
    Particulier
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Particulier

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Points : 49
    Points
    49
    Par défaut
    Donc, getElementsByClassName renvoie un array, dont on connais la taille grâce à array.length ?
    Si c'est ça, je vous remercie énormément, et dans ce cas, oui, tout est clair ! Merci !

  17. #17
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Je ne cherche pas à embrouiller mais...
    Citation Envoyé par X260SH Voir le message
    Donc, getElementsByClassName renvoie un array,...
    non il s'agit en fait d'une NodeList, aucunes des méthodes de l'objet Array ne s'applique.

    NodeList sur MDN

  18. #18
    Membre du Club
    Homme Profil pro
    Particulier
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Particulier

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Points : 49
    Points
    49
    Par défaut
    D'accord, merci beaucoup !
    Du coup, résolu.

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

Discussions similaires

  1. [UI Mobile] Changer le style d'un élément d'une liste(listview) au clic
    Par LaurentC33 dans le forum jQuery
    Réponses: 2
    Dernier message: 03/03/2014, 10h27
  2. [Débutant] Changer style d'un élément ?
    Par ghohm dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 22/06/2007, 09h21
  3. changer le style d'un bouton submit avec du javascript
    Par ipeteivince dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 08/08/2006, 15h44
  4. Changer plusieur style avec des IDs différents?
    Par YanK dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/07/2005, 14h33

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