JSFiddle - React, Tailwind, and code Playground
HTML
<script src="//cdnjs.cloudflare.com/ajax/libs/chosen/1.0/chosen.jquery.js"></script>
<div class="more-files-template hidden">
<label>Select Options</label>
<select data-placeholder="You may select upto Two options" multiple tabindex="6" style="width: 280px; ">
<option value=""></option>
<optgroup label="NFC EAST">
<option>Dallas Cowboys</option>
<option>New York Giants</option>
<option>Philadelphia Eagles</option>
<option>Washington Redskins</option>
</optgroup>
<optgroup label="NFC NORTH">
<option>Chicago Bears</option>
<option>Detroit Lions</option>
<option>Green Bay Packers</option>
<option>Minnesota Vikings</option>
</optgroup>
</select> <a class="remove" href="#">remove</a>
</div>
<form id="form" action="/" method="post">
<div class="files"></div>
</form>
<p><a href="#" class="copy-link">Add More</a>
</p>
<p><a href="#" class="form-submit-button">Submit form</a>
</p>
CSS
/* @group Base */
.hidden {
display:none;
}
.chosen-container {
position: relative;
display: inline-block;
vertical-align: middle;
font-size: 13px;
zoom: 1;
*display: inline;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
.chosen-container .chosen-drop {
position: absolute;
top: 100%;
left: -9999px;
z-index: 1010;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
width: 100%;
border: 1px solid #aaa;
border-top: 0;
background: #fff;
box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15);
}
.chosen-container.chosen-with-drop .chosen-drop {
left: 0;
}
.chosen-container a {
cursor: pointer;
}
/* @end */
/* @group Single Chosen */
.chosen-container-single .chosen-single {
position: relative;
display: block;
overflow: hidden;
padding: 0 0 0 8px;
height: 23px;
border: 1px solid #aaa;
border-radius: 5px;
background-color: #fff;
background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #ffffff), color-stop(50%, #f6f6f6), color-stop(52%, #eeeeee), color-stop(100%, #f4f4f4));
background: -webkit-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
background: -moz-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
background: -o-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
background: linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
background-clip: padding-box;
box-shadow: 0 0 3px white inset, 0 1px 1px rgba(0, 0, 0, 0.1);
color: #444;
text-decoration: none;
white-space: nowrap;
line-height: 24px;
}
.chosen-container-single .chosen-default {
color: #999;
}
.chosen-container-single .chosen-single span {
display: block;
overflow: hidden;
margin-right: 26px;
text-overflow: ellipsis;
white-space:...
JavaScript
$(main);
function main() {
var fieldNumber = 0;
var fieldNameAndID = "Opt_";
var maxFieldsAllowed = 5;
addField(fieldNumber);
$(".copy-link").on("click", function (e) {
e.preventDefault();
addField(fieldNumber);
});
$(".files").on("click", "a", function (e) {
e.preventDefault();
fieldNumber = fieldNumber - 1;
$(this)
.parent()
.slideUp(function () {
$(this).remove();
});
});
$(".form-submit-button").on("click", function (e) {
e.preventDefault();
alert($("#form").serialize());
});
function addField(index) {
fieldNumber = index + 1;
if (fieldNumber > maxFieldsAllowed) {
fieldNumber = fieldNumber - 1;
alert("Sorry! cannot add more than " + maxFieldsAllowed + " fields.");
return false;
}
var newFieldNameAndID = fieldNameAndID + fieldNumber;
var $new = $(".more-files-template")
.clone(true)
.removeClass("more-files-template hidden")
.addClass("another-field");
if (fieldNumber == 1) {
$new.find(".remove").remove();
}
$(".files").append($new);
$new.find("select")
.attr({
name: newFieldNameAndID,
id: newFieldNameAndID
})
.chosen({
max_selected_options: 2
})
.bind("chosen:maxselected", function () {
alert("Maximum limit reached");
});
}
};