JSFiddle - React, Tailwind, and code Playground

by Joe

HTML

<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/jquery.bootstrapvalidator/0.5.3/css/bootstrapValidator.min.css">
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery.bootstrapvalidator/0.5.3/js/bootstrapValidator.js"></script>
<form id="myForm" action="myAction">
    <div class="row" id="line_1">
        <div class="col-md-2 form-group">
            <input type="text" class="form-control input-sm" id="idFirstField_1" name="first">
        </div>
        <div class="col-md-2 form-group">
            <input type="text" class="form-control input-sm" id="idSecondField_1" name="secondField[]">
        </div>
        <div class="col-md-2 form-group">
            <input type="text" class="form-control input-sm" id="idThirdField_1" name="thirdField[]">
        </div>
    </div>
    <a id="cloneButton">add line</a>
</form>

JavaScript

var template = $('#line_1').clone();
var options = {
    fields: {
        'first': {
            validators: {
                notEmpty: {
                    message: 'Enter a value 1'
                }
            }
        },
        'secondField[]': {
            validators: {
                notEmpty: {
                    message: 'Enter a value 2'
                }
            }
        },
        'thirdField[]': {
            validators: {
                notEmpty: {
                    message: 'Enter a value 3'
                }
            }
        }
    }
};
$('#myForm').bootstrapValidator(options);

$('#cloneButton').click(function () {
    var rowId = $('.row').length + 1;
    var validator = $('#myForm').data('bootstrapValidator');
    var klon = template.clone();          
    klon.attr('id', 'line_' + rowId)
        .insertAfter($('.row').last())
        .find('input')
        .each(function () {
            $(this).attr('id', $(this).attr('id').replace(/_(\d*)$/, "_"+rowId));
            validator.addField($(this));
        })                   
});