回答編集履歴
1
捨てよ jQuery
answer
CHANGED
@@ -27,4 +27,42 @@
|
|
27
27
|
|
28
28
|
|
29
29
|
```
|
30
|
-
こんなことをするくらいなら、最初から5個程度フォームを準備して必要な分だけ表示するほうが良いのだと作ってから思いました。
|
30
|
+
こんなことをするくらいなら、最初から5個程度フォームを準備して必要な分だけ表示するほうが良いのだと作ってから思いました。
|
31
|
+
|
32
|
+
--
|
33
|
+
追記
|
34
|
+
jQuery を意地でも使いたい人と、意地になって使わない人との掛け合いね。
|
35
|
+
changeイベントを張り付けてからだと、新規挿入分は無視されているかな。
|
36
|
+
ルートから監視すれば取得できますよ。
|
37
|
+
|
38
|
+
```js
|
39
|
+
document.getElementById('add_btn').addEventListener ('click', ()=> {
|
40
|
+
let
|
41
|
+
parent = document.querySelector ('.items'),
|
42
|
+
childs = parent.querySelectorAll ('.item'),
|
43
|
+
len = childs.length,
|
44
|
+
item = childs[0].cloneNode (true),
|
45
|
+
a = [...item.querySelectorAll ('*[for]')],
|
46
|
+
b = [...item.querySelectorAll ('*[name]')],
|
47
|
+
c = [...item.querySelectorAll ('*[id]')],
|
48
|
+
f = item.querySelector ('input[type="file"]'),
|
49
|
+
reg0 = /^.+[\d+]$/,
|
50
|
+
reg1 = /[\d+]$/,
|
51
|
+
str = `[${len}]`;
|
52
|
+
|
53
|
+
a.forEach (a=> reg0.test (a.getAttribute('for')) && a.setAttribute ('for', a.getAttribute('for').replace (reg1, str)));
|
54
|
+
b.forEach (a=> reg0.test (a.name) && a.setAttribute ('name', a.name.replace (reg1, str)));
|
55
|
+
c.forEach (a=> reg0.test (a.id) && a.setAttribute ('id', a.id.replace (reg1, str)));
|
56
|
+
f.value = '';
|
57
|
+
parent.appendChild (item);
|
58
|
+
}, false);
|
59
|
+
|
60
|
+
|
61
|
+
//ルートから取得
|
62
|
+
document.addEventListener ('change', event=> {
|
63
|
+
let fs = document.querySelectorAll ('input[type="file"]');
|
64
|
+
let vals = [...fs].map (f=> f.value).join (", ");
|
65
|
+
console.log(vals);
|
66
|
+
});
|
67
|
+
|
68
|
+
```
|