"Multiple Fields Contact Form"
Bootstrap 3.3.0 Snippet by zer00ne

<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css"> <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/js/bootstrap.min.js"></script> <script src="//code.jquery.com/jquery-1.11.1.min.js"></script> <!------ Include the above in your HEAD tag ----------> <div class="container"> <div class="row"> <h2>Multiple Fields Contact Form</h2> <div class="col-md-4"> <!--====[ #data Button ]======================================================================================================================--> <a href="#" id="data" class="btn btn-primary btn-primary" style="margin: 10px;"><span class="glyphicon glyphicon-random"></span> DATA</a> <div class="contacts"> <label>Contacts:</label> <div class="form-group multiple-form-group input-group"> <div class="input-group-btn input-group-select"> <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> <span class="concept">Phone</span> <span class="caret"></span> </button> <ul class="dropdown-menu" role="menu"> <li><a href="#phone">Phone</a></li> <li><a href="#fax">Fax</a></li> <li><a href="#skype">Skype</a></li> <li><a href="#email">E-mail</a></li> <li><a href="#www">Web</a></li> </ul> <!--========================[ .cache Hidden Input ]===========================--> <input name="" value="" type="hidden" class="cache"/> <input type="hidden" class="input-group-select-val" name="contacts['type'][]" value="phone"> </div> <input type="text" name="contacts['value'][]" class="form-control"> <span class="input-group-btn"> <button type="button" class="btn btn-success btn-add">+</button> </span> </div> </div> </div> </div> </div> </div>
(function ($) { $(function () { var addFormGroup = function (event) { event.preventDefault(); var $formGroup = $(this).closest('.form-group'); var $multipleFormGroup = $formGroup.closest('.multiple-form-group'); var $formGroupClone = $formGroup.clone(); $(this) .toggleClass('btn-success btn-add btn-danger btn-remove') .html('–'); $formGroupClone.find('input').val(''); $formGroupClone.find('.concept').text('Phone'); $formGroupClone.insertAfter($formGroup); var $lastFormGroupLast = $multipleFormGroup.find('.form-group:last'); if ($multipleFormGroup.data('max') <= countFormGroup($multipleFormGroup)) { $lastFormGroupLast.find('.btn-add').attr('disabled', true); } }; var removeFormGroup = function (event) { event.preventDefault(); var $formGroup = $(this).closest('.form-group'); var $multipleFormGroup = $formGroup.closest('.multiple-form-group'); var $lastFormGroupLast = $multipleFormGroup.find('.form-group:last'); if ($multipleFormGroup.data('max') >= countFormGroup($multipleFormGroup)) { $lastFormGroupLast.find('.btn-add').attr('disabled', false); } $formGroup.remove(); }; var selectFormGroup = function (event) { event.preventDefault(); var $selectGroup = $(this).closest('.input-group-select'); var param = $(this).attr("href").replace("#",""); var concept = $(this).text(); $selectGroup.find('.concept').text(concept); $selectGroup.find('.input-group-select-val').val(param); } var countFormGroup = function ($form) { return $form.find('.form-group').length; }; /* collectData Function~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/ This function given a group of elements (in classic selector format) will assign each element the values of the closest fields as a unique name and the user entered value (if any.) Use the console to see it gather data. */ var collectData = function(ele) { var $tgt = $(ele); $tgt.each(function(index) { // $tgt == $(this) var $fieldNames = $(this).next('.input-group-select-val').val(); var $fieldValues = $(this).closest('.form-group').find('.form-control').val(); // Including index to each $fieldName in order to make each key/value pair unique. $(this).attr('name', $fieldNames+index); console.log('name: '+$(this).attr('name')); $(this).val($fieldValues); console.log('value: '+$(this).val()); }); } $(document).on('click', '.btn-add', addFormGroup); $(document).on('click', '.btn-remove', removeFormGroup); $(document).on('click', '.dropdown-menu a', selectFormGroup); // Clicking the #data button will call the collectData('.cache') function. $('#data').click(function(e){ collectData('.cache'); e.preventDefault(); }); }); })(jQuery);

Related: See More


Questions / Comments:

How do I just let add 3 input and no more?

David Moreno Ortiz () - 7 years ago - Reply 0