jQuery.fn.extend({ createRepeater: function (options = {}) { var hasOption = function (optionKey) { return options.hasOwnProperty(optionKey); }; var option = function (optionKey) { return options[optionKey]; }; var generateId = function (string) { return string .replace(/\[/g, '_') .replace(/\]/g, '') .toLowerCase(); }; var addItem = function (items, key, fresh = true) { var itemContent = items; var group = itemContent.data("group"); var item = itemContent; var input = item.find('input,select,textarea'); input.each(function (index, el) { var attrName = $(el).data('name'); var skipName = $(el).data('skip-name'); if (skipName != true) { $(el).attr("name", group + "[" + key + "]" + "[" + attrName + "]"); } else { if (attrName != 'undefined') { $(el).attr("name", attrName); } } if (fresh == true) { $(el).attr('value', ''); } $(el).attr('id', generateId($(el).attr('name'))); $(el).parent().find('label').attr('for', generateId($(el).attr('name'))); }) var itemClone = items; /* Handling remove btn */ var removeButton = itemClone.find('.remove-btn'); if (key == 0) { removeButton.attr('disabled', true); } else { removeButton.attr('disabled', false); } removeButton.attr('onclick', '$(this).parents(\'.items\').remove()'); var newItem = $("