Javascript 克隆元素更改事件行为

Javascript 克隆元素更改事件行为,javascript,jquery,html,Javascript,Jquery,Html,我对以下问题有一个疑问: 我有一个字段监听字段中发生的更改,但当该对象被克隆时,它会将一个字段覆盖到另一个字段,我的意思是,如果在一个字段中选择3,它会显示3,但是如果在克隆字段中选择4,它会显示4,而不是7,为什么? 我知道我已经制作了一个浅镜(plainObject),但最后应该很容易: parseInt($('.selector')[0].value)+parseInt($('.selector')[1].value) 其中有超过1个元素 我准备了一把小提琴: 我从来没有面对过克隆对象,

我对以下问题有一个疑问:

我有一个字段监听字段中发生的更改,但当该对象被克隆时,它会将一个字段覆盖到另一个字段,我的意思是,如果在一个字段中选择3,它会显示3,但是如果在克隆字段中选择4,它会显示4,而不是7,为什么? 我知道我已经制作了一个浅镜(plainObject),但最后应该很容易:

parseInt($('.selector')[0].value)+parseInt($('.selector')[1].value)
其中有超过1个元素

我准备了一把小提琴:

我从来没有面对过克隆对象,我读到过制作
克隆(真的,真的)
将通过事件和大量信息进行深度克隆,但没有幸运,没有任何建议或想法

$(文档)。在(“单击”上,“#btnNewDistribution”,函数(){
var distributionContainers=$(“distributionContainers”);
var lastDistributionContainer=$(distributionContainers.children().last(“.DistributionContainer”);
var newDistributionContainer=$(lastDistributionContainer).clone(true);
$(newDistributionContainer).find(“.ChildAgesContainer”).empty();
distributionContainers.append(newDistributionContainer);
});
$('.AmountField')。在('change',function()上{
document.getElementById(“habitacionesFiltroTop”).innerHTML=this.value;
微积分()法;
});
calculoAmount=函数(){
对于(var i=$('.well')。长度-1;i==0;i--){
如果((i-1)>0){
html(parseInt($('.form-control.AmountField')[i].value)+parseInt($('.form-control.AmountField')[i-1].value));
}否则{
html(parseInt($('.form-control.AmountField')[i].value));
}
}
}

分布
居住区


1. 2. 3. 4. 阿杜尔托斯

1. 2. 3. 4. 尼诺斯

居住区:
问题在于,对所有
.AmoutField
元素的值求和的逻辑存在缺陷。首先,
habitacionesFiltroTop
是一个元素对象,而不是jQuery对象,所以
html()
不起作用。其次,您可以使用
each()
循环所有
.AmountField
元素。试试这个:

$(文档)。在(“单击”上,“#btnNewDistribution”,函数(){
var$distributionContainers=$(“distributionContainers”);
var$lastDistributionContainer=$distributionContainers.children().last(“.DistributionContainer”);
var$newDistributionContainer=$lastDistributionContainer.clone(true);
$newDistributionContainer.find(“.ChildAgesContainer”).empty();
$distributionContainers.append($newDistributionContainer);
});
$('.AmountField')。在('change',function()上{
var TotalHabitationes=0;
$('.AmountField')。每个((i,el)=>TotalHabitationes+=parseInt(el.value,10)| | 0);
$(“#habitacionesFiltroTop')。文本(totalHabitaciones);
}).触发(“变更”)

分布
居住区


1. 2. 3. 4. 阿杜尔托斯

1. 2. 3. 4. 尼诺斯

居住区:
请修复我为您编写的代码片段中的控制台错误看起来不太复杂,我可以问您为什么要制作一个
。每个(I,el)
,这两个参数的含义是什么吗?
each()
是循环DOM中的每个
。AmountField
。该调用中的函数对找到的每个元素运行,并将其文本添加到运行总数中。在函数中,
i
是集合中当前元素的索引,
el
是对该元素的引用。有关更多信息,请参阅文档:谢谢@rory maccrossan,我想,我没有太多地使用新函数,如
每个
过滤器
。是的,现在有点清楚了,为了保持对我们正在迭代的对象的引用,我们需要生成一个键值,这很正常,很好,非常感谢你,Rory!!(又是杰杰)。