Skip to content

Instantly share code, notes, and snippets.

@timurvafin
Created March 1, 2011 15:39
Show Gist options
  • Save timurvafin/849308 to your computer and use it in GitHub Desktop.
Save timurvafin/849308 to your computer and use it in GitHub Desktop.
jquery.multiply_fields.js
(function($) {
$.fn.multiply_fields = function(options) {
var settings = {
'item': '.item',
'add-trigger': '.add-trigger',
'remove-trigger': '.remove-trigger'
};
return this.each(function() {
var methods = {
update_attr: function(element, attribute, id) {
$(element).attr(attribute, $(element).attr(attribute).replace(/\d+/, id));
},
update_attr_for_input: function(elem, id) {
elem.children('input').each(function() {
methods.update_attr(this, 'id', id);
methods.update_attr(this, 'name', id);
});
},
get_fields: function() {
return $(settings['item']);
},
show_hide_remove_trigger: function() {
var fields = methods.get_fields();
var len = fields.length;
if (len == 1) {
$(settings['remove-trigger']).hide();
} else {
$(settings['remove-trigger']).show();
}
},
add_trigger: function() {
var fields = methods.get_fields();
var len = fields.length;
var pos = new Number(len + 1);
var new_elem = fields.first().clone();
methods.update_attr_for_input(new_elem, pos);
$this.append(new_elem);
methods.show_hide_remove_trigger();
},
remove_trigger: function() {
$(this).parent(settings['item']).remove();
methods.show_hide_remove_trigger();
}
};
if (options) {
$.extend(settings, options);
}
var $this = $(this);
$(settings['add-trigger']).live('click', methods.add_trigger);
$(settings['remove-trigger']).live('click', methods.remove_trigger);
methods.show_hide_remove_trigger();
});
};
})(jQuery);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment