114 votes

Ajout dynamique d'éléments de saisie au formulaire

J'ai lu de nombreux blogs et articles sur l'ajout dynamique de champs, mais ils donnent tous une réponse très compliquée. Ce dont j'ai besoin n'est pas si compliqué.

Mon code HTML :

<input type="text" name="member" value="">Number of members: (max. 10)<br />
<a href="#" id="filldetails">Fill Details</a>

Ainsi, un utilisateur saisit une valeur entière (je vérifie la validation à l'aide de javascript) dans le champ input champ. Et en cliquant sur le bouton Fill Details un nombre correspondant de champs de saisie apparaîtra pour qu'il puisse entrer. Je veux réaliser cela en utilisant javascript.

Je ne suis pas un pro du javascript. Je me demandais comment je pouvais récupérer le nombre entier rempli par l'utilisateur dans le champ input par le lien et en affichant le nombre correspondant de champs de saisie.

180voto

Xavi López Points 14801

Vous pourriez utiliser un onclick afin d'obtenir la valeur de saisie du champ de texte. Veillez à donner au champ un nom unique id afin de pouvoir y faire référence en toute sécurité par l'intermédiaire de document.getElementById() :

Si vous voulez ajouter des éléments de manière dynamique, vous devez disposer d'un conteneur où les placer. Par exemple, un <div id="container"> . Créer de nouveaux éléments au moyen de document.createElement() et utiliser appendChild() pour ajouter chacun d'entre eux au conteneur. Vous pourriez être intéressé par la sortie d'un fichier significatif name (par exemple, l'attribut name="member"+i pour chacun des éléments générés dynamiquement <input> s s'ils doivent être soumis dans un formulaire.

Remarquez que vous pourriez aussi créer <br/> éléments avec document.createElement('br') . Si vous souhaitez simplement afficher du texte, vous pouvez utiliser la fonction document.createTextNode() à la place.

De plus, si vous souhaitez vider le conteneur chaque fois qu'il est sur le point d'être rempli, vous pouvez utiliser la commande suivante hasChildNodes() y removeChild() ensemble.

<html>
<head>
    <script type='text/javascript'>
        function addFields(){
            // Generate a dynamic number of inputs
            var number = document.getElementById("member").value;
            // Get the element where the inputs will be added to
            var container = document.getElementById("container");
            // Remove every children it had before
            while (container.hasChildNodes()) {
                container.removeChild(container.lastChild);
            }
            for (i=0;i<number;i++){
                // Append a node with a random text
                container.appendChild(document.createTextNode("Member " + (i+1)));
                // Create an <input> element, set its type and name attributes
                var input = document.createElement("input");
                input.type = "text";
                input.name = "member" + i;
                container.appendChild(input);
                // Append a line break 
                container.appendChild(document.createElement("br"));
            }
        }
    </script>
</head>
<body>
    <input type="text" id="member" name="member" value="">Number of members: (max. 10)<br />
    <a href="#" id="filldetails" onclick="addFields()">Fill Details</a>
    <div id="container"/>
</body>
</html>

Voir un exemple de travail dans cette JSFiddle .

53voto

M. Lak Points 299

Essayez ce code JQuery pour inclure dynamiquement le formulaire, le champ et le comportement de suppression/suppression :

$(document).ready(function() {
    var max_fields = 10;
    var wrapper = $(".container1");
    var add_button = $(".add_form_field");

    var x = 1;
    $(add_button).click(function(e) {
        e.preventDefault();
        if (x < max_fields) {
            x++;
            $(wrapper).append('<div><input type="text" name="mytext[]"/><a href="#" class="delete">Delete</a></div>'); //add input box
        } else {
            alert('You Reached the limits')
        }
    });

    $(wrapper).on("click", ".delete", function(e) {
        e.preventDefault();
        $(this).parent('div').remove();
        x--;
    })
});

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container1">
    <button class="add_form_field">Add New Field &nbsp; 
      <span style="font-size:16px; font-weight:bold;">+ </span>
    </button>
    <div><input type="text" name="mytext[]"></div>
</div>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X