jQuery Multifield Plugin
A jQuery plugin which allows you to create dynamic field groups.
Plugin Init
<script>
$('#wrapper').multifield({
section: '.section',
btnAdd:'.btnAdd',
btnRemove:'.btnRemove'
});
</script>
Plugin Options
| Option | Type | Default | Description |
|---|---|---|---|
| section | string | null | REQUIRED Selector of the section which is located inside of the parent wrapper |
| btnAdd | string | null | REQUIRED Selector of the "Add section" button - can be located everywhere on the page |
| btnRemove | string | null | REQUIRED Selector of the "Remove section" button - should be located INSIDE of the "section" |
| max | integer | 0 | Maximum section |
| locale | string | 'default' | Language to use, default is english |
Basic usage #1 (HTML5 data-attribute options) SOURCE
<div id="example-1" class="content" data-mfield-options='{"section": ".group","btnAdd":"#btnAdd-1","btnRemove":".btnRemove"}'>
<div class="row">
<div class="col-md-12"><button type="button" id="btnAdd-1" class="btn btn-primary">Add section</button></div>
</div>
<div class="row group">
<div class="col-md-2">
<input class="form-control" type="text">
</div>
<div class="col-md-2">
<input class="form-control" type="text">
</div>
<div class="col-md-4">
<textarea></textarea>
</div>
<div class="col-md-3">
<button type="button" class="btn btn-danger btnRemove">Remove</button>
</div>
</div>
</div>
<script>
$('#example-1').multifield();
</script>
Basic usage #2 (JavaScript options) SOURCE
<div id="example-2" class="content"> <div class="row"> <div class="col-md-12"><button type="button" id="btnAdd-2" class="btn btn-primary">Add section</button></div> </div> <div class="row group"> <div class="col-md-2"> <input class="form-control" type="text"> </div> <div class="col-md-2"> <input class="form-control" type="text"> </div> <div class="col-md-4"> <textarea></textarea> </div> <div class="col-md-3"> <button type="button" class="btn btn-danger btnRemove">Remove</button> </div> </div> </div>
<script>
$('#example-2').multifield({
section: '.group',
btnAdd:'#btnAdd-2',
btnRemove:'.btnRemove'
});
</script>
Example #3 (The maximum sections count) SOURCE
You can set maximum sections count via 'max' option.
<div id="example-3" class="content"> <div class="row"> <div class="col-md-12"><button type="button" id="btnAdd-3" class="btn btn-primary">Add section</button></div> </div> <div class="row group"> <div class="col-md-2"> <input class="form-control" type="text"> </div> <div class="col-md-2"> <input class="form-control" type="text"> </div> <div class="col-md-4"> <textarea></textarea> </div> <div class="col-md-3"> <button type="button" class="btn btn-danger btnRemove">Remove</button> </div> </div> </div>
<script>
$('#example-3').multifield({
section: '.group',
btnAdd:'#btnAdd-3',
btnRemove:'.btnRemove',
max: 3
});
</script>
Example #4 (Localization) SOURCE
You can translate confirmation message which appears on section remove.
To do so just pass an object with translated strings through the 'locale' option.
<div id="example-4" class="content"> <div class="row"> <div class="col-md-12"><button type="button" id="btnAdd-4" class="btn btn-primary">Добавить</button></div> </div> <div class="row group"> <div class="col-md-2"> <input class="form-control" type="text"> </div> <div class="col-md-2"> <input class="form-control" type="text"> </div> <div class="col-md-4"> <textarea></textarea> </div> <div class="col-md-3"> <button type="button" class="btn btn-danger btnRemove">Удалить</button> </div> </div> </div>
<script>
$('#example-4').multifield({
section: '.group',
btnAdd:'#btnAdd-4',
btnRemove:'.btnRemove',
locale:{
"multiField": {
"messages": {
"removeConfirmation": "Вы уверены, что вы хотите удалить этот элемент?"
}
}
}
});
</script>
Example #5 (Advanced) SOURCE
To use radio buttons you should add numeric value to their names, for example: name="group[0]"
Add "reset-image-src" class to image to reset image src
<div id="example-5" class="content"> <div class="row"> <div class="col-md-12"><button type="button" id="btnAdd-5" class="btn btn-primary">Add section</button></div> </div> <div class="row group"> <div class="col-md-2"> <select name="select_example[]"> <option value="1">Option 1</option> <option value="2">Option 2</option> <option value="3">Option 3</option> </select> </div> <div class="col-md-2"> <input type="radio" name="radio_example[0]" value="1"> Option 1 <br> <input type="radio" name="radio_example[0]" value="2"> Option 2 <br> <input type="radio" name="radio_example[0]" value="3"> Option 3 <br> </div> <div class="col-md-3"> <p>Image src will not be cleared</p> <img class="media-object" alt="64x64" src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZpZXdCb3g9IjAgMCA2NCA2NCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+PCEtLQpTb3VyY2UgVVJMOiBob2xkZXIuanMvNjR4NjQKQ3JlYXRlZCB3aXRoIEhvbGRlci5qcyAyLjYuMC4KTGVhcm4gbW9yZSBhdCBodHRwOi8vaG9sZGVyanMuY29tCihjKSAyMDEyLTIwMTUgSXZhbiBNYWxvcGluc2t5IC0gaHR0cDovL2ltc2t5LmNvCi0tPjxkZWZzPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCFbQ0RBVEFbI2hvbGRlcl8xNGU0MzRkMDhhOCB0ZXh0IHsgZmlsbDojQUFBQUFBO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1mYW1pbHk6QXJpYWwsIEhlbHZldGljYSwgT3BlbiBTYW5zLCBzYW5zLXNlcmlmLCBtb25vc3BhY2U7Zm9udC1zaXplOjEwcHQgfSBdXT48L3N0eWxlPjwvZGVmcz48ZyBpZD0iaG9sZGVyXzE0ZTQzNGQwOGE4Ij48cmVjdCB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIGZpbGw9IiNFRUVFRUUiLz48Zz48dGV4dCB4PSIxNC41IiB5PSIzNi41Ij42NHg2NDwvdGV4dD48L2c+PC9nPjwvc3ZnPg==" style="width: 64px; height: 64px;"> </div> <div class="col-md-2"> <p>Image src will be cleared</p> <img class="media-object reset-image-src" alt="Image" src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZpZXdCb3g9IjAgMCA2NCA2NCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+PCEtLQpTb3VyY2UgVVJMOiBob2xkZXIuanMvNjR4NjQKQ3JlYXRlZCB3aXRoIEhvbGRlci5qcyAyLjYuMC4KTGVhcm4gbW9yZSBhdCBodHRwOi8vaG9sZGVyanMuY29tCihjKSAyMDEyLTIwMTUgSXZhbiBNYWxvcGluc2t5IC0gaHR0cDovL2ltc2t5LmNvCi0tPjxkZWZzPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCFbQ0RBVEFbI2hvbGRlcl8xNGU0MzRkMDhhOCB0ZXh0IHsgZmlsbDojQUFBQUFBO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1mYW1pbHk6QXJpYWwsIEhlbHZldGljYSwgT3BlbiBTYW5zLCBzYW5zLXNlcmlmLCBtb25vc3BhY2U7Zm9udC1zaXplOjEwcHQgfSBdXT48L3N0eWxlPjwvZGVmcz48ZyBpZD0iaG9sZGVyXzE0ZTQzNGQwOGE4Ij48cmVjdCB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIGZpbGw9IiNFRUVFRUUiLz48Zz48dGV4dCB4PSIxNC41IiB5PSIzNi41Ij42NHg2NDwvdGV4dD48L2c+PC9nPjwvc3ZnPg==" style="width: 64px; height: 64px;"> </div> <div class="col-md-2"> <button type="button" class="btn btn-danger btnRemove">Remove</button> </div> </div> </div>
<script>
$('#example-5').multifield({
section: '.group',
btnAdd:'#btnAdd-5',
btnRemove:'.btnRemove',
});
</script>
Option 1
Option 2
Option 3
Option 2
Option 3
Image src will not be cleared
Image src will be cleared
Example #6 (Handling data with PHP) SOURCE
<form method="post"> <div id="example-6" class="content"> <div class="row"> <div class="col-md-12"><button type="button" id="btnAdd-6" class="btn btn-primary">Add Employee</button></div> </div> <div class="row group"> <div class="col-md-2"> <div class="form-group"> <label>Name<input class="form-control" class="form-control" type="text" name="user_name[]"></label> </div> </div> <div class="col-md-2"> <label>Gender <select name="user_gender[]" class="form-control"> <option value="">Please select..</option> <option value="male">Male</option> <option value="female">Female</option> </select> </label> </div> <div class="col-md-4"> <div class="col-md-2"> <div class="radio"> <label><input type="radio" name="user_role[0]" value="manager"> Manager </label> </div> <div class="radio"> <label><input type="radio" name="user_role[0]" value="editor"> Editor </label> </div> <div class="radio"> <label class="checkbox-inline"><input type="radio" name="user_role[0]" value="writer"> Writer </label> </div> </div> </div> <div class="col-md-3"> <button type="button" class="btn btn-danger btnRemove">Remove</button> </div> </div> </div> </form>
<script>
$('#example-6').multifield({
section: '.group',
btnAdd:'#btnAdd-6',
btnRemove:'.btnRemove',
});
</script>
<?php var_dump($_POST); ?>
OUTPUT :
'user_name' =>
array (size=5)
0 => string 'John Doe' (length=8)
1 => string 'Alice Smith' (length=11)
2 => string 'Jason Louis' (length=11)
3 => string 'Bob Freeman' (length=11)
4 => string 'Jane Watkins' (length=12)
'user_gender' =>
array (size=5)
0 => string 'male' (length=4)
1 => string 'female' (length=6)
2 => string 'male' (length=4)
3 => string 'male' (length=4)
4 => string 'female' (length=6)
'user_role' =>
array (size=5)
0 => string 'manager' (length=7)
1 => string 'editor' (length=6)
2 => string 'writer' (length=6)
3 => string 'writer' (length=6)
4 => string 'writer' (length=6)
// Get information about the first record
$_POST['user_name'][0]; // John Doe
$_POST['user_gender'][0]; // male
$_POST['user_role'][0]; // manager