Partage
  • Partager sur Facebook
  • Partager sur Twitter

[JS] Cmt reconnaitre le label lié à une puce

Sujet résolu
    22 juin 2006 à 12:36:16

    Bonjour à tous,

    j'ai ce bout de code de HTML (c'est voulu si la puce n'est pas enfant du label) qui ne doit pas être changé :
    <input type="radio" value="xxx" name="puce1" id="1" />
    <label for="1">xxx</label>

    Et j'aimerais bien coloré le label correspondant à la puce qui sera sélectionnée.
    Alors la question c'est : comment reconnaitre le label correspondant à la puce qui sera cochée ?

    Merci d'avance !!
    • Partager sur Facebook
    • Partager sur Twitter
      22 juin 2006 à 13:15:07

      Lut


      Ca va pas être simple...
      Tu doit récupéré tous les <label> (avec getElementsByTagName)
      Ensuite tu doit faire une boucle (avec comme limite la taille de l'array fait au dessus)
      Dans la boucle, tu vérifie l'attribut for, pour vérifier s'il est égal à 1, à ce moment là, tu l'as....


      • Partager sur Facebook
      • Partager sur Twitter
        22 juin 2006 à 13:26:27

        Ok je suis le résonnement ! Merci bien!
        Par contre, comme je suis un tout nouveau en JavaScript, je ne connais pas du tout la notion de getElementsByTagName que j'ai pourtant vu à plusieurs endroits.
        Aurais-tu le temps et la patiente de me l'expliquer STP ?

        Sinon, pour vérifier l'attribut for je fait window.document.form.label.for ? Ou autrement (je pense que ce sera autrement :euh: .)
        Merci !!
        • Partager sur Facebook
        • Partager sur Twitter
          22 juin 2006 à 13:43:16

          Me dérange pas dans la limite de mes connaissances..
          Mais là de suite, pas possible (doit y aller)


          Si tu veux être sur que je n'oublie pas ton sujet, mais un post pour qu'il apparaise dans les nouveaux topics répondu ^^

          Et puis non pour l'attribut ^^
          • Partager sur Facebook
          • Partager sur Twitter
            22 juin 2006 à 14:07:53

            Deuxième essai ^^ : window.document.forms[0].label1.for ?
            Une ptite question, où as-tu appris le JS, parce que j'ai trouvé un petit cours sur l'éditeur javascript mais je ne pense pas qu'il soit assez complet pour me permettre d'arriver à un niveau respectable :euh: (j'ai appris les principales notions du JS mais c'est tout...).
            Merci pour ton aide :) .
            • Partager sur Facebook
            • Partager sur Twitter
              22 juin 2006 à 15:01:52

              Bon, j'ai réussi a faire ce que tu veux en JS :
              <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
              <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
                      <head>
                              <title>Bienvenue sur mon site !</title>
                              <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
                              <script type="text/javascript">
                                      <!--
                                      function colorer(radio)
                                              {
                                              labels = radio.form.getElementsByTagName("label");
                                              id = radio.getAttribute("id");
                                              for(var i = 0; i < labels.length; i++)
                                                      {
                                                      if(labels[i].getAttribute("for") == id)
                                                              {
                                                              labels[i].style.backgroundColor = 'blue';
                                                              }
                                                      else
                                                              {
                                                              labels[i].style.backgroundColor = 'white';
                                                              }
                                                      }
                                              }
                                      -->

                              </script>
                      </head>
                      <body>
                              <form method="post" action="traitement.php">
                 <p>
                     Veuillez indiquer la tranche d'âge dans laquelle vous vous situez :<br />
                     <label for="1">Moins de 15 ans </label><input type="radio" name="age" value="moins15" id="1" onchange="javascript:colorer(this);"/><br />
                     <label for="2">15-25 ans </label><input type="radio" name="age" value="15-25" id="2" onchange="javascript:colorer(this);"/><br />
                     <label for="3">25-40 ans </label><input type="radio" name="age" value="25-40" id="3" onchange="javascript:colorer(this);"/><br />
                     <label for="4">Encore plus vieux que ça ?! </label><input type="radio" name="age" value="plus40" id="4" onchange="javascript:colorer(this);"/>
                 </p>
              </form>
                      </body>
              </html>


              En clair, dès qu'on change de puce, on regarde pour chaque chque label du formulaire, si son attribut for est le même que l'id de la puce. Si oui, j'ai mis un fond bleu, sinon, un fond blanc.
              Le seul problème, c'est que ça marche si tu as une seule série de puces dans ton forumlaire. Sinon, seule la dernière puce sélectionnée sera coloriée.

              Voilà, dis-moi si tu as un problême avec.
              • Partager sur Facebook
              • Partager sur Twitter
                22 juin 2006 à 16:13:26

                Merci beaucoup shuss, j'ai compris comment utiliser getElements et getAttribute grâce à ton exemple.
                Le script fonctionne très bien !!
                • Partager sur Facebook
                • Partager sur Twitter
                  22 juin 2006 à 16:45:22

                  :'( Il a tout dit.....



                  Bon juste je rajouterais qu'il serait peut être mieux de mettre document.getElementsByTagName('label')
                  Et d'éviter les noms qui peuvent porté à confusion (id par exemple)


                  Sinon, ou j'ai appri...... Nul part, mes connaisances en JS me viennent de mes recherches perso, d'analyse de script....
                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 juin 2006 à 17:00:46

                    Si j'ai mis radio.form.getElementsByTagName("label"); au lieu de domcument.getElementsByTagName("label");, c'est tout simplement qu'il se peut qu'il éxiste deux formulaires, dans lequel il y a deux séries de boutons radio qui ont le même non (et oui, faut penser à tout :p ). Et en plus, ça restreint la recherche, donc je pense que ça l'accélère.

                    Sinon, c'est vrai qu'on peu trouver des noms plus significatifs pour les variables, on pourrait mettre idRadioCoche qui permetterait de savoir éxactement de quoi on parle. Mais quand je fais des petits scripts de ce genre, qui sont plutôt des essais, je ne fais pas trop attention à ce genre de détail, qui seront réglés plus tard.

                    Sinon, moi, j'ai appris sur quelques sites, où j'ai trouvé des tutos (du moins pour les bases), ce tuto m'a permis de me perfectionner en trouvant des méthodes comme getElementById, mais le mieux reste l'espérience : quand tu cherche une fonction, Google est ton ami, et après tu trouves des infos ou des scripts qui t'aideront plus tard.


                    Désolé de t'avoir volé tes réponses, Hawks ! Mais j'ai que ça a faire ... donc du coup, j'aide qui je peux.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 juin 2006 à 17:16:43

                      Citation : shuss

                      Si j'ai mis radio.form.getElementsByTagName("label"); au lieu de domcument.getElementsByTagName("label");, c'est tout simplement qu'il se peut qu'il éxiste deux formulaires, dans lequel il y a deux séries de boutons radio qui ont le même non (et oui, faut penser à tout :p ). Et en plus, ça restreint la recherche, donc je pense que ça l'accélère.


                      Le for est lié à l'id des <input>, or tu sais comme moi que l'id est unique, donc chaque label est unique (c'est surtout pour ça que je proposait le document.getMachin)
                      En plus, ça lui permet de modifier s'il veux faire un truc semblable sur plusieurs <form>
                      Maintenant, c'est peut être effectivement plus rapide....


                      Citation : shuss

                      Sinon, c'est vrai qu'on peu trouver des noms plus significatifs pour les variables, on pourrait mettre idRadioCoche qui permetterait de savoir éxactement de quoi on parle. Mais quand je fais des petits scripts de ce genre, qui sont plutôt des essais, je ne fais pas trop attention à ce genre de détail, qui seront réglés plus tard.


                      C'est surtout pour foeu que je dis ça.... Pour qu'il fasse attention ^^


                      Citation : shuss

                      Désolé de t'avoir volé tes réponses, Hawks ! Mais j'ai que ça a faire ... donc du coup, j'aide qui je peux.


                      Non, c'est pas grave.... On avait pas signé de contrat d'exclusivité... :p Ici, c'est avant tout de l'entre-aide, peux importe d'où elle viens....
                      (au contraire, ça me rassure dans le fait que j'ai choisi la bonne solution ^^ )


                      Tiens, je viens de voir un truc....
                      Si tu veux vraiment accélérer le script, sort le getElementsByTagName de la fonction.... Là, à chaque appel de la fonction tu recréé l'array labels.
                      Par contre, pour que ça marche il faut faire une variable contenant tout le document dès le départ.... (donc ce que je disait tout à l'heure)



                      Edit
                      +1 pour le tuto!!! ^^^^
                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 juin 2006 à 17:34:35

                        Désolé de te contredire (je pense que tu t'y connaître mieux que moi), mais le problême, c'est qu'il faut à tout pris remettre le font de l'ancien label sélectionné en blanc (et ici, je les remets donc tous en blanc), sinon, ba ils se colorient tous un par un (ou autrement, faudrait enregistrer l'ancien id, pour pouvoir décolorer le label correspondant quand ça change, et en plus, ça permetterait de pouvoir utiliser plusieurs séries de radios).

                        Mais ce n'était pas pour la rapidité que j'ai choisi cette solution ! Mais mettre ça dans une variable implique que s'il a un formulaire dynamique avec des radios qui se créent et se suppriment, ba ça va bugger. Après, je donne ça, c'est à titre d'exemple, je ne le fais pas trop compliqué, s'il veut le modifier, ba il peut.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          22 juin 2006 à 20:37:32

                          Un grand merci à vous deux les gars ! J'espère qu'avec de la pratique je vais réussir à maitrise le JS comme vous !
                          Si vous avez un problème en PHP un jour, contacter moi par MP, je serais ravi de vous aider à mon tour :D !!
                          Bonne continuation !!
                          • Partager sur Facebook
                          • Partager sur Twitter
                            23 juin 2006 à 1:59:52

                            Citation : shuss

                            Désolé de te contredire


                            Non, non, vas-y, c'est aussi comme ça qu'on apprend.... ^^


                            Citation : shuss

                            (je pense que tu t'y connaître mieux que moi)


                            C'est marrant je pensait exactemnet la même chose de toi ^^



                            Citation : shuss

                            mais le problême, c'est qu'il faut à tout pris remettre le font de l'ancien label sélectionné en blanc (et ici, je les remets donc tous en blanc), sinon, ba ils se colorient tous un par un (ou autrement, faudrait enregistrer l'ancien id, pour pouvoir décolorer le label correspondant quand ça change, et en plus, ça permetterait de pouvoir utiliser plusieurs séries de radios).

                            Mais ce n'était pas pour la rapidité que j'ai choisi cette solution ! Mais mettre ça dans une variable implique que s'il a un formulaire dynamique avec des radios qui se créent et se suppriment, ba ça va bugger. Après, je donne ça, c'est à titre d'exemple, je ne le fais pas trop compliqué, s'il veut le modifier, ba il peut.


                            Ma méthode en faite ne permettrait pas directement de l'utiliser sur plusieurs <form>.... C'est vrai je viens de le voir.... (sauf s'il veux juste colorer au moment du click ^^ )


                            PS: je sais pas si tu connais ça schuss, mais je l'ai beaucoup chercher, alors je me dit que toi aussi peut-etre.... Un validateur de JavaScript (qui corrige certaines erreurs ^^ )
                            • Partager sur Facebook
                            • Partager sur Twitter
                              23 juin 2006 à 10:25:19

                              Kawks -> merci beaucoup, ça me permettera de virer les erreurs style l'oublie d'un ; ou d'une {, ou encore un s à getElementsByTagName !


                              foeu -> lol, ça fait la deuxième fois que je t'aide, va falloir que je te trouve un script PHP à me faire !
                              • Partager sur Facebook
                              • Partager sur Twitter

                              [JS] Cmt reconnaitre le label lié à une puce

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown