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 :

Ajouter des champs dynamiquement


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Par défaut Ajouter des champs dynamiquement
    Bonjour
    J'ai un formulaire dans lequel j'ai un élément button comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <button>+ Ajouter une expérience</button>
    J'aimerais que quand je clique sur ce bouton, j'ai 3 champs textes et un champ d'une liste déroulante qui apparaissent. Je voudrai pouvoir recliquer sur ce bouton et afficher encore d'autres même champs à remplir. Comment puis-je le faire ? Aidez-moi !

  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
    Salut,

    On peut le faire d'une façon qui est critiquée je crois a savoir en utilisant la propriété innerHTML, on crée par exemple une div, on lui ajoute le code html qu'on veut via la propriété innerHTML puis on a ajoute cette div au document.

    Sinon on utilise les méthode de manipulation du DOM mais je trouve que ça peut être long des fois...

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  4. #4
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Par défaut
    J'ai trouvé ce script qui permet juste d'ajouter un seul champ texte :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <form name="formulaireDynamique">
       <input type="button" onclick="ajout(this);" value="ajouter un champ"/>
       <br /><br />
       <input type="submit" value="soumettre"/>
    </form>
     
    <script type="text/Javascript" >
       function ajout(element){
          var formulaire = window.document.formulaireDynamique;
          // On clone le bouton d'ajout
          var ajout = element.cloneNode(true);
          // Crée un nouvel élément de type "input"
          var champ = document.createElement("input");
          // Les valeurs encodée dans le formulaire seront stockées dans un tableau
          champ.name = "champs[]";
          champ.type = "text";
     
          var sup = document.createElement("input");
          sup.value = "supprimer un champ";
          sup.type = "button";
          // Ajout de l'événement onclick
          sup.onclick = function onclick(event)
             {suppression(this);};
     
          // On crée un nouvel élément de type "p" et on insère le champ l'intérieur.
          var bloc = document.createElement("p");
          bloc.appendChild(champ);
          formulaire.insertBefore(ajout, element);
          formulaire.insertBefore(sup, element);
          formulaire.insertBefore(bloc, element);
       }
     
    function suppression(element){
       var formulaire = window.document.formulaireDynamique;
     
       // Supprime le bouton d'ajout
       formulaire.removeChild(element.previousSibling);
       // Supprime le champ
       formulaire.removeChild(element.nextSibling);
       // Supprime le bouton de suppression
       formulaire.removeChild(element);
    }
    </script>
    J'ai modifié ce code pour pouvoir ajouter 3 champs texte et une liste déroulante mais ça ne marche pas :
    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
    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
    56
    57
    58
    59
    60
    61
    <form name="formulaireDynamique">
       <input type="button" onclick="ajout(this);" value="ajouter un champ"/>
       <br /><br />
       <input type="submit" value="soumettre"/>
    </form>
     
    <script type="text/Javascript" >
       function ajout(element){
          var formulaire = window.document.formulaireDynamique;
          // On clone le bouton d'ajout
          var ajout = element.cloneNode(true);
          // Crée 4 nouvels élément de type "input"
          var champ1 = document.createElement("input");
    	  var champ2 = document.createElement("input");
    	  var champ3 = document.createElement("input");
    	  var champ4 = document.createElement("select");
          // Les valeurs encodée dans le formulaire seront stockées dans un tableau
          champ1.name = "champs1[]";
          champ1.type = "text";
     
    	  champ2.name = "champs2[]";
          champ2.type = "text";
     
    	  champ3.name = "champs3[]";
          champ3.type = "text";
     
    	  champ4.name = "champs4[]";
          champ4.type = "text";
     
          var sup = document.createElement("input");
          sup.value = "x";
          sup.type = "button";
          // Ajout de l'événement onclick
          sup.onclick = function onclick(event)
             {suppression(this);};
     
          // On crée un nouvel élément de type "p" et on insère le champ l'intérieur.
          var bloc1 = document.createElement("p");
    	  var bloc2 = document.createElement("p");
    	  var bloc3 = document.createElement("p");
    	  var bloc4 = document.createElement("p");
          bloc1.appendChild(champ1);
    	  bloc2.appendChild(champ2);
    	  bloc3.appendChild(champ3);
    	  bloc4.appendChild(champ4);
          formulaire.insertBefore(ajout, element);
          formulaire.insertBefore(sup, element);
          formulaire.insertBefore(bloc, element);
       }
     
       function suppression(element){
       var formulaire = window.document.formulaireDynamique;
     
       // Supprime le bouton d'ajout
       formulaire.removeChild(element.previousSibling);
       // Supprime le champ
       formulaire.removeChild(element.nextSibling);
       // Supprime le bouton de suppression
       formulaire.removeChild(element);
    }
    </script>

  5. #5
    Membre très actif
    Homme Profil pro
    bricoleur par les mots
    Inscrit en
    Avril 2015
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : bricoleur par les mots
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2015
    Messages : 744
    Par défaut
    jour

    bloc1 bloc2 et bloc3 et bloc4 ne sont pas inséré dans le document

  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
    Oui melka one a raison, à la ligne 48 vous insérez "bloc" qui n'existe pas au lieu d’insérer bloc1, bloc2,bloc3 et bloc4...

    Remplacez cette ligne 48 par :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
          formulaire.insertBefore(bloc1, element);
          formulaire.insertBefore(bloc2, element);
          formulaire.insertBefore(bloc3, element);
          formulaire.insertBefore(bloc4, element);

    Mais il y a d'autres problèmes, la fonction "suppression" ne fonctionne pas car elle était particulière à l'exemple d'où vous l'avez prise...Vous avez maintenant quatre champs il faut donc quatre fois l'instruction : formulaire.removeChild(element.nextSibling);

    Vous pouvez testez ici : http://jsbin.com/savebanoja/edit?html,output

  7. #7
    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
    Je l'ai fait de la façon dont j'ai parlée et qui est critiquée je crois à savoir en utilisant la propriété innerHTML...

    J'ai donc ajouté une ligne, vous prouvez tester ici : http://jsbin.com/qawiyipita/edit?html,console,output

    PS : On peut faire tout le reste de cette manière mais si cela ne vous convient pas il faudra utiliser les mêmes méthodes que celles que vous avez utilisées (createElement(), appendChild()...)

  8. #8
    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
    J'ai fait le reste de cette manière : http://jsbin.com/weloxulobe/1/edit?html,output

    PS : C'est quoi fondamentalement le problème avec cette méthode dans ce genre de situation ?

  9. #9
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 208
    Par défaut
    Bonjour,
    tu peux également regarder du coté de cette discussion : Insertion/Suppression d'une ligne d'une TABLE

  10. #10
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Par défaut
    Bonjour
    Désolée de repondre tardivement, je n'étais pas partie. J'ai pu adopter la dernière solution qui marchait à savoir celle de Beginner.
    Le problème que je rencontre maintenant est comment afficher le rendu en javascript dans un de mes fieldset html ?

    J'ai crée une nouvelle discussion, je ferme celle-ci ! Merci à tous de votre aide

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

Discussions similaires

  1. [AC-2007] ajouter des champs dynamiquement
    Par xargin dans le forum VBA Access
    Réponses: 12
    Dernier message: 21/10/2011, 19h15
  2. [SP-2007] Ajouter des champs dynamiquement dans une cutom list
    Par takuan64 dans le forum SharePoint
    Réponses: 8
    Dernier message: 26/07/2010, 14h12
  3. ajouter des champs dynamiquement en javascript
    Par ncheboi dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 10/03/2010, 14h28
  4. Ajouter des champs dynamiquement
    Par lemirandais dans le forum jQuery
    Réponses: 2
    Dernier message: 25/02/2009, 13h41
  5. Réponses: 1
    Dernier message: 14/08/2006, 09h41

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