Вы захотите создать плагин из этого кода. Подход заключается в том, что вам нужно больше возможностей, добавьте опции в плагин. Я начал плагин ниже. Также код, заменяющий идентификаторы элементов (и т. Д.) Должен быть более общим Ниже я добавил регулярное выражение для замены числа в id элемента.
Добавьте обратные вызовы, где это необходимо для выполнения конкретных действий по реализации / настроек пользовательского интерфейса. Поэтому в приведенном выше примере добавьте код для сброса сообщения html ($('#rider-message').html('')
) в обратном вызове после.
after: function(i){
$('#rider-message').html(''); //...
}
и т. Д.
$.fn.cloneForm = function(options){
var self = this, count = 0,
opts = $.extend({}, {
after: function(){},
template:'',
prependTo: '',
on: 'click'
}, options),
template = $(opts.template).clone(); // unmodified clone
self.bind(opts.on + '.cloneForm', function(){
count++;
template.clone().find(':input').each(function(){
var newId = this.id.replace(/[0-9]/i, count) // replace number
$(this).prev().attr('for', newId); // update label for
this.name = this.id = newId; // update id and name (assume the same)
}).end().prependTo(opts.prependTo);
opts.after.call(self, count); // run callback
});
}
Использование:
$('#addButton').cloneForm({
template: '#riders-div .rider-new:first',
prependTo: '#riders-div',
after: function(){ console.log('im done'); }
});