問題は、cloneMethodがイベント リスナーを複製しないことです。
ノードのクローンを作成すると、固有の (インライン) リスナーを含む、すべての属性とその値がコピーされます。addEventListener() を使用して追加されたイベント リスナーや、要素のプロパティに割り当てられたイベント リスナーはコピーされません。
次のようなことができます。
https://jsfiddle.net/q3Lz997m/2/
const clickBtn = document.querySelector('#addingPerson');
const field = document.querySelector('#inputPerson');
let i = 0;
const deleteField = document.querySelector('.deletePerson');
function deleteDiv(e) {
e.preventDefault();
d = e.target.parentNode.parentNode.parentNode.parentNode;
d.parentNode.removeChild(d);
}
function cloneDiv(event) {
event.preventDefault();
const cloneField = field.cloneNode(true);
cloneField.id = i++;
e = cloneField.querySelector('#addingPerson');
e.addEventListener('click', cloneDiv);
e = cloneField.querySelector('.deletePerson');
e.addEventListener('click', deleteDiv);
field.parentNode.appendChild(cloneField);
}
clickBtn.addEventListener('click', cloneDiv);
deleteField.addEventListener('click', deleteDiv);
そして少し短いバージョンhttps://jsfiddle.net/q3Lz997m/3/ :
function addEventListeners(e) {
e.querySelector('#addingPerson').addEventListener('click', cloneDiv);
e.querySelector('.deletePerson').addEventListener('click', deleteDiv);
}
function deleteDiv(e) {
e.preventDefault();
d = e.target.parentNode.parentNode.parentNode.parentNode;
d.parentNode.removeChild(d);
}
function cloneDiv(e) {
e.preventDefault();
p = e.target.parentNode.parentNode.parentNode.parentNode;
cloneField = p.cloneNode(true);
addEventListeners(cloneField);
p.parentNode.appendChild(cloneField);
}
addEventListeners(document.querySelector('#inputPerson'));
また、ボタンがフォーム内にない限り、 preventDefault() は必要ないと思います。