Partage
  • Partager sur Facebook
  • Partager sur Twitter

document.getElementById

Sujet résolu
    4 décembre 2017 à 13:44:18

    Bonjour,

    je voudrais récupérer la valeur du dernier input automatiquement générer mais comment faire, avec document.getElementById('...').value je récupère bien la valeur du premier mais si un autre est créer par la suite il récupère toujours le premier car ils ont le même id donc comment récuperer la valeur d'un input auto-générer 

    Cordialement

    • Partager sur Facebook
    • Partager sur Twitter
      4 décembre 2017 à 14:09:19

      Salut

      Un identifiant c'est pratique pour identifier un élément unique présent au  chargement de eta page HTML. Ça permet de le récupérer avec getElementById où de lui attribuer un style CSS.

      Par contre si tu le génère en javascript, ce n'est generalement pas nécessaire de lui attribuer un id. En effet si c'est ton script qui le génère, tu peux stocker la référence vers cet élément dans une variable.

      Pour te donner un exemple, il faudrait que tu post un peu de ton code pour voir ce que tu essaies de faire

      -
      Edité par LCaba 4 décembre 2017 à 14:09:46

      • Partager sur Facebook
      • Partager sur Twitter
        4 décembre 2017 à 14:18:22

        Merci,

        voici donc les inputs qui son appeler si l'utilisateur clique sur un bouton :

        <input type='text' placeholder='Email' name='email' id='email'>
                        					<input type='text' placeholder='Prénom' name='prenom' id='prenom'>
                        					<input type='button' value='Envoie' name='button' id='button' onclick='envoiemailreponse()'>

        le fonction javascript qui récupère les valeurs :

        function envoiemailreponse(){
        
               var reponse = document.getElementById('reponse').value;
               var email = document.getElementById('email').value;
               var prenom = document.getElementById('prenom').value;
               $.ajax({
                url : "envoiemail.php", 
                type : "POST", 
                data : "email=" + email + "&prenom=" + prenom + "&reponse=" + reponse,
                success : function(html){
                 $(html).hide().appendTo("#conversation").fadeIn(500);
                 document.getElementById("email").style.display = "none";
                 document.getElementById("prenom").style.display = "none";
                 document.getElementById("button").style.display = "none";
                }
                
            });
           }

        donc si l'utilisateur appuis sur le boutton les input s'afficher et il les remplis si par la suite il clique encore sur le boutton il renseigne un nouveau mail le problème c'est qu'il ne prend pour l'instant que les inputs de la premiere fois et non la deuxieme, je sais bien qu'un id doit être unique mais comment faire alors ? 

        CDT


        • Partager sur Facebook
        • Partager sur Twitter
          4 décembre 2017 à 14:56:47

          pourquoi tu mélanges du javascript "nu" et du "jQuery" ? 

          pourquoi tu réutilises pas tes champs de départ plutot que de les masquer et d'en créer d'autres ?

          pour que tu vois le principe, voici quand-meme un exemple dans lequel je créé de nouveaux éléments sans leur attrbuer d'id : https://jsfiddle.net/fef9g9dk/1/ 

          j'utilise pas jQuery, mais le principe reste le même

          • Partager sur Facebook
          • Partager sur Twitter
            4 décembre 2017 à 15:34:28

            Je ne veut pas réutiliser les mêmes champs justement, je ne peut pas faire getelementsbyclassname et récupérer le dernier de mon tableau ? 

            • Partager sur Facebook
            • Partager sur Twitter
              4 décembre 2017 à 16:10:57

              Je vois bien que tu ne veux pas récupérer les même champs. Mais je ne comprends pas pourquoi puisque tu masque les anciens pour en afficher des nouveaux.

              Bien sur que tu peux utiliser getElementsByClassName (ou querySelectorAll()). 

              • Partager sur Facebook
              • Partager sur Twitter
                4 décembre 2017 à 16:18:39

                Car c'est un projet de chatbot et donc les premiers champs que l'utilisateur rempli remonte au fur et a mesure de la conversation et donc pour pas qu'il ne soit obliger de remonter la conversation le boutton régénère les champs mais le problème c'est que je ne sais pas comment récuperèrer les derniers input dont l'id est ... meme avec getElementsByClassName car il me retourne un tableau 

                • Partager sur Facebook
                • Partager sur Twitter
                  4 décembre 2017 à 16:48:41

                  C'est pas un tableau, c'est une nodeList. Cependant, y a des points communs : une nodeList à une propriété length qui donne le nombre d'éléments de la liste et les éléments y sont indexés de 0 à length-1. Donc récupérer le dernier de la liste est assez aisée.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    5 décembre 2017 à 12:24:05

                    Je viens d'essayer avec ceci et rien a faire je ne comprend pas pourquoi cela ne marche pas :

                    https://jsfiddle.net/xtdzwnLy/

                    a la base :

                    https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_element_getelementsbyclassname

                    • Partager sur Facebook
                    • Partager sur Twitter
                      5 décembre 2017 à 12:38:36

                      Relis bien ce que j'ai écrit après indexés
                      • Partager sur Facebook
                      • Partager sur Twitter
                        5 décembre 2017 à 14:30:32

                        effectivement je viens de réussir merci beaucoup pour ton aide !

                        • Partager sur Facebook
                        • Partager sur Twitter
                          5 décembre 2017 à 14:37:25

                          par contre au lieu d'acrire :

                          var i = document.getElementsByClassName('child').length;
                          document.getElementsByClassName('child')[i - 1].innerHTML //...

                          écris plutot :

                          var list = document.getElementsByClassName('child');
                          list[list.length - 1].innerHTML //...


                          Dans le 1er cas t'appelle 2 fois une méthode qui parcours le DOM en entier pour chercher des éléments qui ont la classe "child" alors que c'est inutile : une fois suffit.

                          • Partager sur Facebook
                          • Partager sur Twitter

                          document.getElementById

                          × 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