logo
Form Repeater

Creates an interface to add and remove a repeatable group of input elements. Demo page.

Usage

To use the plugin, you need to add the following files.

<!-- Javascript -->
<script src="libs/form-repeater/repeater.min.js"></script>

Repeating Forms

<form class="repeater-1">
    <div data-repeater-list="group-a">
        <div data-repeater-item>
            <div class="row">
                <div class="col-md-3 col-sm-12 mb-3">
                    <label for="name" class="form-label">Name</label>
                    <input type="email" class="form-control" name="name" id="name" placeholder="Enter email id">
                </div>
                <div class="col-md-3 col-sm-12 mb-3">
                    <label for="email" class="form-label">Email</label>
                    <input type="email" class="form-control" name="email" id="email" placeholder="Enter email id">
                </div>
                <div class="col-md-3 col-sm-12 mb-3">
                    <label for="profession" class="form-label">Profession</label>
                    <select name="profession" id="profession" class="form-control">
                        <option>Select</option>
                        <option value="FontEnd Developer">Designer</option>
                        <option value="BackEnd Developer">Developer</option>
                        <option value="Business Analytics">Tester</option>
                        <option value="Project Coordinator">Manager</option>
                    </select>
                </div>
                <div class="col-md-3 col-sm-12">
                    <div><label class="form-label"> </label></div>
                    <button class="btn btn-danger" data-repeater-delete>Delete</button>
                </div>
            </div>
        </div>
    </div>
    <button type="button" class="btn btn-primary" data-repeater-create>Add</button>
</form>
$(document).ready(function () {
    $('.repeater-1').repeater();
});

Alert Repeating

An example that warns before the row is deleted.

<form class="repeater-2">
    <button type="button" class="btn btn-primary mb-3" data-repeater-create>Add</button>
    <div data-repeater-list="group-a">
        <div data-repeater-item>
            <div class="row">
                <div class="col-md-2 col-sm-12 mb-3">
                    <label for="username" class="form-label">Username</label>
                    <input type="text" class="form-control" name="username" id="username" placeholder="Username">
                </div>
                <div class="col-md-2 col-sm-12 mb-3">
                    <label for="phone" class="form-label">Phone</label>
                    <input type="text" class="form-control" name="phone" id="phone" placeholder="Enter email id">
                </div>
                <div class="col-md-2 col-sm-12 mb-3">
                    <div><label class="form-label"> </label></div>
                    <button type="button" class="btn btn-danger btn-floating" data-repeater-delete>
                        Delete
                    </button>
                </div>
            </div>
        </div>
    </div>
</form>
$('.repeater-2').repeater({
    hide: function (deleteElement) {
        swal({
            title: "Are you sure?",
            text: "Are you sure you want to delete this element?",
            icon: "warning",
            buttons: true,
            dangerMode: true,
        }).then((willDelete) => {
            if (willDelete) {
                $(this).slideUp(deleteElement);
            }
        })
    }
});

Nested Repeating

Category

Products

<form class="nested-repeater">
    <div data-repeater-list="outer-list">
        <div class="mb-3" data-repeater-item>
            <p>Category</p>
            <div class="d-flex mb-3">
                <input type="text" class="form-control" name="text-input"/>
                <button class="btn btn-danger flex-shrink-0 ms-3" data-repeater-delete type="button">
                    Delete
                </button>
            </div>

            <!-- innner repeater -->
            <div class="card bg-light">
                <div class="card-body">
                    <p>Products</p>
                    <div class="inner-repeater">
                        <div data-repeater-list="inner-list">
                            <div class="d-flex mb-3" data-repeater-item>
                                <input type="text" class="form-control" name="inner-text-input"/>
                                <button class="btn btn-danger flex-shrink-0 ms-3" data-repeater-delete type="button">
                                    Delete
                                </button>
                            </div>
                        </div>
                        <button class="btn btn-primary" data-repeater-create type="button">
                            Add Product
                        </button>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <button class="btn btn-primary" data-repeater-create type="button">
        Add Category
    </button>
</form>
$('.nested-repeater').repeater({
    repeaters: [{
        selector: '.inner-repeater'
    }]
});
On this page