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

Bibliothèques & Frameworks Discussion :

Dupliquer un élément HTML (liste déroulante avec le même chargement de données SQL) en Javascript


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre du Club
    Inscrit en
    Août 2004
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 254
    Points : 69
    Points
    69
    Par défaut Dupliquer un élément HTML (liste déroulante avec le même chargement de données SQL) en Javascript
    Bonjour

    J'ai un tableau html avec dansw chaque ligne une liste déroulante.
    Maintenant a l'aide d'un bouton je décide d'ajouter des lignes qui comporteront la mémé liste déroulante.
    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
    17
    18
    19
    20
    21
    22
    23
    <table align="center" id="idtabaert">
    <caption>Les articles</caption>
     <tr>
    	  <td><select name="facture_article" id="facture_article">
    	       <?php
            $reponse = $bdd_facture->query('SELECT Designation FROM articles');
     
            while ($donnees = $reponse->fetch())
    {
            echo '<option value="'.$donnees['Designation'].'">'.$donnees['Designation'].'</option>';
     
                                                               
    }
     
    $reponse->closeCursor();                                           
                   
     
    ?>
     
    </select>
    </td>
     </tr>
    </table>
    Maintenant voila la fonction Javascript qui ajoute des lignes déclenché par un evenement click sur un bouton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function ajouterLigne()
       {
      var tableau = document.getElementById("idtabaert");
        var ligne = tableau.insertRow(-1);
       var colonne1 = ligne.insertCell(0);
        colonne1.innerHTML =    '   ' ;    //  Je veux mettre ici la même liste déroulante (<select name="facture_article" id="facture_article">) c'est a dire le contenu html et son chargement qu'il y a en haut
    
    
        
    	
    	
    	   }
    Comment réaliser cela ?

    Cordialement

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 98
    Points : 184
    Points
    184
    Par défaut
    tu peux essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    colonne1.innerHTML = document.getElementById("facture_article").parentNode.innerHTML;
    Mais tu auras un problème avec des listes ayant le même name et id.

    Il faut donc mieux passer par le clonage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var newList = document.getElementById("facture_article").cloneNode(true);
    newList.id = newList.id + tableau.rows.length;
    newList.name = newList.name  + tableau.rows.length;
    colonne1.appendChild(newList);
    Sachant que si tu peux supprimer des lignes, il faudra trouver une autre façon de différentier l'id ou le name de tes listes.

  3. #3
    Membre du Club
    Inscrit en
    Août 2004
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 254
    Points : 69
    Points
    69
    Par défaut
    Merci beacoup ca marche
    pour l'instant j'ai pas besoin de supprimer mais je comprens pas pourquoi jaurais besoin de differencier les id et name

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 98
    Points : 184
    Points
    184
    Par défaut
    Le names doivent être différentiés pour pouvoir les récupérer de façon unique.
    Les ids sont par convention unique dans une page (contrairement aux classes).
    Ensuite pour les lignes si tu en supprimes un et que tu en rajoutes une autres, tu risque d'avoir deux fois le même id et name à cause de : tableau.rows.length
    Donc si un jour tu permets de supprimer des lignes, faudra mettre un compteur différent.
    Bon courage,

  5. #5
    Membre du Club
    Inscrit en
    Août 2004
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 254
    Points : 69
    Points
    69
    Par défaut
    Bonjour,

    Maintenant je dois récupérer les donnes et les envoyer par la méthode Ajax.

    Pour cela je décidé de mettre les champs de liste déroulantes dans un tableau.
    Et comme on avait fait un clone de champs de liste déroulante qui sont différencies par leur Id en jouant sur le nombre de lignes du tab leau,

    par

    //idtabaert est L'ID d'un element HTML table
    // Dans chaque ligne et dans chaque cellulle du tableau, on a une liste déroulante d'ID facture_article

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var tableau = document.getElementById("idtabaert");
     var ligne = tableau.insertRow(-1);
      var colonne1 = ligne.insertCell(0);
    var newList = document.getElementById("facture_article").cloneNode(true);
    newList.id = newList.id + tableau.rows.length;
    newList.name = newList.name  + tableau.rows.length;
    colonne1.appendChild(newList);

    mon problème est comment les ranger dans un tableau
    j'ai essaye ceci

    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
    test=new Array();
     test[0]=document.getElementById("facture_article").value;
     var arrayLignes = document.getElementById("idtabaert").rows; //l'array est stocké dans une variable
     
    var longueur = arrayLignes.length;//on peut donc appliquer la propriété length
     
    var i=1; //on définit un incrementeur qui représentera la clé
    var j=1;
     
    while(i<longueur)
     
    	{
     
     
    		test[i] = document.getElementById("facture_article"+j).value;
    		i++;
    	      j++;
     
    	}
    mais ça marche pas.

    Vous avez une idée ?

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 98
    Points : 184
    Points
    184
    Par défaut
    Bonjour,

    Le plus simple à mon avis est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var newList = document.getElementById("facture_article").cloneNode(true);
    newList.id = newList.id + tableau.rows.length;
    newList.name = newList.name  + tableau.rows.length;
    newList.class = "myLists";
    colonne1.appendChild(newList);
    Puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var myLists = document.getElementsByClassName('myLists');
    var myListsValues = new.Array();
    for (i=0; i < myLists.length; i++) {
      myListsValues.push(myLists[i].options[myLists[i].selectedIndex].value); 
    }
    Pas testé donc bug d'écriture possible mais le principe est là

  7. #7
    Membre du Club
    Inscrit en
    Août 2004
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 254
    Points : 69
    Points
    69
    Par défaut
    Je l'ai bien teste mais en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     alert(myListsValues[1]);
    j'obtiens

    undefined

    Peut être qu'il y a un problème de syntaxe ?

  8. #8
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 98
    Points : 184
    Points
    184
    Par défaut
    erreur de frappe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var myListsValues = new Array();
    N'hésite pas à utiliser la console de ton navigateur pour débuger.

  9. #9
    Membre du Club
    Inscrit en
    Août 2004
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 254
    Points : 69
    Points
    69
    Par défaut
    ok pourtant je l'avais bien corrige mais ça ne change rien
    toujours undefined.

  10. #10
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 98
    Points : 184
    Points
    184
    Par défaut
    Le script est pourtant bon. Tu peux tester cet 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
    <!DOCTYPE html>
    <html>
      <head>
      </head>
      <body style="margin: 0; padding: 0">
        <select class="myLists" name="facture_article" id="facture_article">
          <option value="1">un</option>
          <option value="2">deux</option>
          <option value="3" selected>trois</option>
          <option value="4">quatre</option>
        </select>
        <select class="myLists"  name="facture_article2" id="facture_article2">
          <option value="1">un</option>
          <option value="2" selected>deux</option>
          <option value="3">trois</option>
          <option value="4">quatre</option>
        </select>
        <script>
          var myLists = document.getElementsByClassName('myLists');
          var myListsValues = new Array();
          for (i=0; i < myLists.length; i++) {
            myListsValues.push(myLists[i].options[myLists[i].selectedIndex].value); 
          }
          alert(myListsValues[0]);
        </script
      </body>
    </html>
    As tu bien rajouté la class 'myLists' à ton select ?
    J'avais rajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newList.class = "myLists";
    dans la copie de la liste initiale.
    D'ailleurs en fait il faut mieux enlever cette ligne de la copie et le mettre dans ton select initial :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <td><select name="facture_article" id="facture_article" class="myLists">...

    Quand tu as des problèmes de ce type il faut vraiment que tu utilises la console.
    ex dans IE : F12 clic sur l'onglet console et rafraichie ta page.
    Quel message as tu ?

  11. #11
    Membre du Club
    Inscrit en
    Août 2004
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 254
    Points : 69
    Points
    69
    Par défaut
    Merci.

    C'est réglé. il fallait mettre au niveau de l’élément la classe.


    merci pour tout.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/10/2011, 11h15
  2. liste déroulante avec un aperçu lié a chaque élément de la liste
    Par sylvainsly dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/03/2011, 13h20
  3. Zone de liste déroulante avec regroupement des éléments
    Par Lincoln911 dans le forum VBA Access
    Réponses: 1
    Dernier message: 26/04/2010, 12h55
  4. [HTML] liste déroulante avec redirection
    Par xoflam dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 21/02/2008, 12h50
  5. liste déroulante avec session
    Par leeloo076 dans le forum ASP
    Réponses: 3
    Dernier message: 19/03/2004, 11h01

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