动态表单字段添加清除所有字段的输入

Dynamic form field adding clears the input for all fields

我创建了一个可以动态添加和删除字段的表单。我非常接近它的工作,但出于某种原因,我可以填写第一个字段,添加一个新字段,并且第一个字段数据仍然存在。然后当我添加第二个字段时,填写它并添加另一个,它将清除所有现有数据。

我可以看出 flatpickr 日历总是在第一个字段上,但是当我添加后续字段时,flatpickr 日历仅适用于最后一个字段并且不会实际显示介于两者之间。我真的需要一些帮助,因为我花了很长时间才弄明白:(

我认为这是我的 JS 的问题以及它如何获取最后一个元素,而不是它如何调用 flatpickr 库。

这是我在 JSFiddle 中的所有代码: https://jsfiddle.net/danboy4/w9s9ayep/

谢谢!

您的假设是正确的,即错误位于获取最后一个元素的方式上。 您有以下代码:

var html = $(".copy-fields").html();
$(".after-add-more").after(html);

var lastInput = $(".control-group").closest(".start").prevObject 
var lastInput2 = lastInput[lastInput.length-2].getElementsByClassName("start")[0];

这会在第一个输入框之后直接添加新复制的字段,但是当从数组中获取元素时,您需要使用 flatpickr,您会使用 lastInput.length-2。该索引将始终是最后一个可见框的索引。问题是你新添加的框不是最后一个可见框而是第二个可见框(因为它是直接添加在第一个输入框之后)。因此它会覆盖以前的值。

因此,如果您只是将 var lastInput2 = lastInput[lastInput.length-2].getElementsByClassName("start")[0]; 更改为 var lastInput2 = lastInput[1].getElementsByClassName("start")[0];,它就会按预期工作。

或者您可以保留 var lastInput2 = lastInput[lastInput.length-2].getElementsByClassName("start")[0]; 原样,而是更改新元素的放置位置。要始终将其放在末尾,您可以这样做 $("#button").before(html);

希望能帮到你。