0

I have a simple form in which I want a user to be able to add inputs dynamically,

Here is what I have tried so far.

HTML form looks like this

enter image description here

HTML code for the above form

<form>
    <dvi class="container h-100">
        <div class="d-flex justify-content-center">
            <div class="card mt-5 col-md-12 animated bounceInDown myForm">
                <div class="card-header">
                    <h4>Bidders Information</h4>
                </div>
                <div class="card-body">
                    <form>
                        <div id="dynamic_container">
                            <div class="input-group">
                                <div class="input-group-prepend">
                                    <span class="input-group-text br-15"><i class="fa fa-tags"></i></span>
                                </div>
                                <input type="text" placeholder="Bidders Name" class="form-control" />
                            </div>
                            <div class="input-group mt-3" id="field">
                                <div class="input-group-prepend">
                                    <span class="input-group-text br-15"><i class="fa fa-tags"></i></span>
                                </div>
                                <input type="text" placeholder="atribute name" id="field1" class="form-control" />
                                <input type="text" placeholder="atribute value" id="field2" class="form-control" />
                                <a class="btn btn-secondary btn-sm" id="add_more_input">
                                    <i class="fa fa-minus-circle"></i> Add
                                </a>
                            </div>

                        </div>
                    </form>
                </div>
                <div class="card-footer">
                    <a class="btn btn-secondary btn-sm" id="add_more"><i class="fa fa-plus-circle"></i> Add</a>
                    <a class="btn btn-secondary btn-sm" id="remove_more"><i class="fa fa-trash-alt"></i> Remove</a>
                    <button class="btn btn-success btn-sm float-right submit_btn"><i class="fas fa-arrow-alt-circle-right"></i> Submit</button>
                </div>
            </div>
        </div>
    </dvi>
    </div>
    <div class="card-footer ml-auto mr-auto">
        <button type="submit" class="btn btn-primary">{{ __('Add Page') }}</button>
    </div>
    </div>
</form>

Here is jquery code for adding input dynamically

var next = 1;
$("#add_more_input").click(function(e) {
    e.preventDefault();
    var addto = "#field" + next;
    var addRemove = "#field" + (next);
    next = next + 1;
    var newIn = '<div class="input-group mt-3" id="field"><div class="input-group-prepend"><span class="input-group-text br-15"><i class="fa fa-tags"></i></span></div><input type="text" placeholder="atribute name" class="form-control" id="field' + next + '" name="field' + next + '"/>  <input type="text" placeholder="atribute value" class="form-control" id="field' + next + '" name="field' + next + '"/></div> ';

    var newInput = $(newIn);
    var removeBtn = '<a id="remove' + (next - 1) + '" class="btn btn-secondary btn-sm remove-me add_more_input"><i class="fa fa-minus-circle"></i> Add</a></div><div id="field';
    var removeButton = $(removeBtn);
    $(addto).after(newInput);

    $(addRemove).after(removeButton);
    $("#field" + next).attr('data-source', $(addto).attr('data-source'));
    $("#count").val(next);

    $('.remove-me').click(function(e) {
        e.preventDefault();
        var fieldNum = this.id.charAt(this.id.length - 1);
        var fieldID = "#field" + fieldNum;
        $(this).remove();
        $(fieldID).remove();
    });
});

Now when a user clicks button add input row I am getting the following

enter image description here

but the expected result should look like this

enter image description here

HERE is jsfiddle DEMO

What am I doing wrong???

0

2 Answers 2

2

please check it may help you.

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .myForm {
            background-color: rgb(156, 39, 176) !important;
            padding: 15px !important;
            border-radius: 15px !important;
            color: white;

        }

        input {
            border-radius: 0 15px 15px 0 !important;

        }

        input:focus {
            outline: none;
            box-shadow: none !important;
            border: 1px solid #ccc !important;

        }

        .br-15 {
            border-radius: 15px 0 0 15px !important;
        }

        #add_more {
            color: white !important;
            background-color: #fa8231 !important;
            border-radius: 15px !important;
            border: 0 !important;

        }

        #add_more_input {
            color: white !important;
            background-color: #fa8231 !important;
            border-radius: 15px !important;
            border: 0 !important;

        }

        .add_more_input {
            color: white !important;
            background-color: #fa8231 !important;
            border-radius: 15px !important;
            border: 0 !important;
        }

        #remove_more {
            color: white !important;
            background-color: #fc5c65 !important;
            border-radius: 15px !important;
            border: 0 !important;
            display: none;

        }

        .submit_btn {
            border-radius: 15px !important;
            background-color: #95c714 !important;
            border: 0 !important;
        }
    </style>
</head>

<body>


    <link rel="stylesheet" type="text/css"
        href="https://github.com/throne1986/roayalad-blog/blob/master/public/material/css/material-dashboard.css">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">

    <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>

    <form>
        <dvi class="container h-100">
            <div class="d-flex justify-content-center">
                <div class="card mt-5 col-md-12 animated bounceInDown myForm">
                    <div class="card-header">
                        <h4>Bidders Information</h4>
                    </div>
                    <div class="card-body">
                        <form>
                            <div id="dynamic_container">
                                <div class="input-group">
                                    <div class="input-group-prepend">
                                        <span class="input-group-text br-15"><i class="fa fa-tags"></i></span>
                                    </div>
                                    <input type="text" placeholder="Bidders Name" class="form-control" />
                                </div>
                                <div class="input-group mt-3" id="field">
                                    <div class="input-group-prepend">
                                        <span class="input-group-text br-15"><i class="fa fa-tags"></i></span>
                                    </div>
                                    <input type="text" placeholder="atribute name" id="field1" class="form-control" />
                                    <input type="text" placeholder="atribute value" id="field2" class="form-control" />
                                    <a class="btn btn-secondary btn-sm" id="add_more_input">
                                        <i class="fa fa-minus-circle"></i> Add
                                    </a>
                                </div>

                            </div>
                        </form>
</body>
<script>


   var iteration = 1;
    document.getElementById('add_more_input').addEventListener('click', function () {
        var content = `<div class="input-group mt-3" id="field${iteration}">
                                    <div class="input-group-prepend">
                                        <span class="input-group-text br-15"><i class="fa fa-tags"></i></span>
                                    </div>
                                    <input type="text" placeholder="atribute name" id="field${iteration}" class="form-control" />
                                    <input type="text" placeholder="atribute value" value="${iteration} "id="field2" class="form-control" />
                                    <a class="btn btn-secondary btn-sm" onclick="remove(event)">
                                        <i class="fa fa-minus-circle"></i> remove
                                    </a>
                  </div>
     `;
        var parsedContent = new DOMParser().parseFromString(content, 'text/html').body.firstChild;
        document.getElementById('dynamic_container').appendChild(parsedContent);
        iteration++;
    })

 function remove(e){
    e = e || window.event;
    document.getElementById('dynamic_container').removeChild(e.target.closest('.input-group'))
    console.log(e.target.closest('.input-group'))
 }


</script>

</html>
Sign up to request clarification or add additional context in comments.

Comments

0

You can use the clone function in jquery and change the cloned div id and then you can add the new div wherever you want example :

$('#cloneDiv').click(function(){

  var $div = $('div[id^="DIV_ID_to_clone"]:last');

  // Read the Number from that DIV's ID if you could add a number to your div id (i.e: 3 from "field_1")
  // And increment that number by 1
  var num = parseInt( $div.prop("id").match(/\d+/g), 10 ) +1;

  // Clone it and assign the new ID (i.e: from num 4 to ID "field_2")
  var $cloned= $div.clone().prop('id', 'field_'+num );

  // Finally insert $cloned wherever you want
  $div.after( $cloned.text('field_'+num) );

});

1 Comment

kindly add comment if you still need a jsfiddle example

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.