user10604874
user10604874

Reputation:

I want to create multiple forms based on the user input of a dropdown list

I want to create multiple forms based on user input of a dropdown list. For example, if the user selects 3, then I have to create 3 same forms, one after another. I have the code below:
HTML code

    <div class="container">
        <div class="row">
            <div class="col-md-12">
                <div class="form-group">
                    <label for="selectPassegners">Select the number of passengers:</label>
                    <select class="form-control" id="passengersSelector">
                        <option value="1" selected>1</option>
                        <option value="2">2</option>
                        <option value="3">3</option>
                        <option value="4">4</option>
                        <option value="5">5</option>
                        <option value="6">6</option>
                    </select>
                </div>
            </div>
        </div>
    </div>
    <button type="button" onclick="GetSelectedValue()" style="margin-left: 390px;">Get Selected Value</button>
    <p id="result" style="text-align: center;"></p>

    <div class="container" id="outside-container">
        <div class="row">
            <div class="col-md-12">
                <h1>Passenger Info</h1>
                <p>Enter your personal info below. These data will be displayed on your ticket.</p>
                <form id="lead-passenger" action="" method="post">
                    <div class="container" id="inside-container">
                        <h2>Passenger One (Lead passenger)</h2>
                        <div class="row">
                            <div class="col-md-4">
                                <div class="form-group">
                                    <label for="firstname">First name:</label>
                                    <input type="text" class="form-control" id="firstname" name="firtName">
                                </div>
                            </div>
                            <div class="col-md-4">
                                <div class="form-group">
                                    <label for="lastname">Last name:</label>
                                    <input type="text" class="form-control" id="lastname" name=lastName>
                                </div>
                            </div>
                            <div class="col-md-4">
                                <div class="form-group">
                                    <label for="ptitle">Sex:</label>
                                    <select class="form-control" id="sel-title" name="sex">
                                        <option style="display:none"></option>
                                        <option>Male</option>
                                        <option>Female</option>
                                    </select>
                                </div>
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-md-4">
                                <div class="form-group">
                                    <label for="birthday">Date of birth: </label>
                                    <input type="date" class="form-control" name="birthday">
                                </div>
                            </div>
                            <div class="col-md-4">
                                <div class="form-group">
                                    <label for="phone">Phone:</label>
                                    <input type="tel" class="form-control" id="phone" name="phone" pattern="[6]{1}-[9]{1}-[0-9]{8}">
                                </div>
                            </div>
                            <div class="col-md-4">
                                <div class="form-group">
                                    <label for="email">Email:</label>
                                    <input type="email" class="form-control" id="email" name="email">
                                </div>
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-md-4">
                                <div class="form-group">
                                    <label for="address">Address:</label>
                                    <input type="text" class="form-control" id="address" name="address">
                                </div>
                            </div>
                            <div class="col-md-4">
                                <div class="form-group">
                                    <label for="city">City:</label>
                                    <input type="text" class="form-control" id="city" name="city">
                                </div>
                            </div>
                            <div class="col-md-4">
                                <div class="form-group">
                                    <label for="address">Postal code:</label>
                                    <input type="text" class="form-control" id="address" name="postalCode">
                                </div>
                            </div>
                        </div>
                    </div>


                </form>

            </div>
        </div>
    </div>

And JS code I found that shows the result of the dropdown list

function GetSelectedValue() {
    var e = document.getElementById("passengersSelector");
    var numberOfPassengers = e.options[e.selectedIndex].value;

    document.getElementById("result").innerHTML = "You selected " + numberOfPassengers + " passengers";
}

I am still a beginner, so any tips would be appreciated! :)

Upvotes: 0

Views: 293

Answers (1)

AdityaParab
AdityaParab

Reputation: 7100

You can store the contents of your outside-container class in a separate variable. And depending on the user selection, add this variable that many times to the array.

const formMarkup = `<div class="row">
        <div class="col-md-12">
            <h1>Passenger Info</h1>
            <p>Enter your personal info below. These data will be displayed on your ticket.</p>
            <form id="lead-passenger" action="" method="post">
                <div class="container" id="inside-container">
                    <h2>Passenger One (Lead passenger)</h2>
                    <div class="row">
                        <div class="col-md-4">
                            <div class="form-group">
                                <label for="firstname">First name:</label>
                                <input type="text" class="form-control" id="firstname" name="firtName">
                            </div>
                        </div>
                        <div class="col-md-4">
                            <div class="form-group">
                                <label for="lastname">Last name:</label>
                                <input type="text" class="form-control" id="lastname" name=lastName>
                            </div>
                        </div>
                        <div class="col-md-4">
                            <div class="form-group">
                                <label for="ptitle">Sex:</label>
                                <select class="form-control" id="sel-title" name="sex">
                                    <option style="display:none"></option>
                                    <option>Male</option>
                                    <option>Female</option>
                                </select>
                            </div>
                        </div>
                    </div>
                    <div class="row">
                        <div class="col-md-4">
                            <div class="form-group">
                                <label for="birthday">Date of birth: </label>
                                <input type="date" class="form-control" name="birthday">
                            </div>
                        </div>
                        <div class="col-md-4">
                            <div class="form-group">
                                <label for="phone">Phone:</label>
                                <input type="tel" class="form-control" id="phone" name="phone" pattern="[6]{1}-[9]{1}-[0-9]{8}">
                            </div>
                        </div>
                        <div class="col-md-4">
                            <div class="form-group">
                                <label for="email">Email:</label>
                                <input type="email" class="form-control" id="email" name="email">
                            </div>
                        </div>
                    </div>
                    <div class="row">
                        <div class="col-md-4">
                            <div class="form-group">
                                <label for="address">Address:</label>
                                <input type="text" class="form-control" id="address" name="address">
                            </div>
                        </div>
                        <div class="col-md-4">
                            <div class="form-group">
                                <label for="city">City:</label>
                                <input type="text" class="form-control" id="city" name="city">
                            </div>
                        </div>
                        <div class="col-md-4">
                            <div class="form-group">
                                <label for="address">Postal code:</label>
                                <input type="text" class="form-control" id="address" name="postalCode">
                            </div>
                        </div>
                    </div>
                </div>


            </form>

        </div>
    </div>`

And then

function GetSelectedValue() {
    var e = document.getElementById("passengersSelector");
    var numberOfPassengers = e.options[e.selectedIndex].value;
    var result = [];
    for(var i=0; i < numberOfPassengers; i++) {
        result.push(formMarkup);
    }

    document.getElementById("outside-container").innerHTML = result.join('');
}

Also, update your original markup to

<div class="container">
        <div class="row">
            <div class="col-md-12">
                <div class="form-group">
                    <label for="selectPassegners">Select the number of passengers:</label>
                    <select class="form-control" id="passengersSelector">
                        <option value="1" selected>1</option>
                        <option value="2">2</option>
                        <option value="3">3</option>
                        <option value="4">4</option>
                        <option value="5">5</option>
                        <option value="6">6</option>
                    </select>
                </div>
            </div>
        </div>
    </div>
    <button type="button" onclick="GetSelectedValue()" style="margin-left: 390px;">Get Selected Value</button>
    <p id="result" style="text-align: center;"></p>

    <div class="container" id="outside-container">
    </div>

Upvotes: 1

Related Questions