UNPKG

1.57 kBJavaScriptView Raw
1
2
3$(function() {
4
5 const repeat = () => {
6 $('.repeater').each(function() {
7 const repeater = $(this);
8 const attr = repeater.data('attr');
9 let i = 0;
10
11 // save model if needed
12 if (!repeater.data('model')) {
13 const model = repeater.find('.model');
14 model.remove();
15 model.removeClass('d-none');
16 repeater.data('model', model);
17 }
18
19 repeater.find('.item').each(function() {
20 const item = $(this);
21 item.find('.item-i').html(i+1);
22 item.find('input, textarea').each(function() {
23 const element = $(this);
24 if (!element.data('firstname')) {
25 let firstname = element.attr('name');
26 let k = firstname.indexOf('[');
27 if (k > -1) {
28 firstname = `[${firstname.substring(0, k)}]${firstname.substring(k)}`
29 } else {
30 firstname = `[${firstname}]`;
31 }
32 element.data('firstname', firstname);
33 }
34 element.attr('name', `${attr}[${i}]${element.data('firstname')}`);
35 });
36 i++;
37 });
38 repeater.find('.item-count').html(i);
39 });
40 };
41 repeat();
42
43
44 $('.repeater').on('click', '.add-item', function(e) {
45 e.preventDefault();
46 const repeater = $(this).closest('.repeater');
47 repeater.data('model').clone().appendTo(repeater.find('.items'));
48 repeat();
49 });
50
51 $('.repeater').on('click', '.delete-item', function(e) {
52 e.preventDefault();
53 const item = $(this).closest('.item');
54 item.remove();
55 repeat();
56 });
57
58});