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 |
|
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 | });
|