需要一些帮助或指示来实现以下目标。 单击时克隆输入字段并检索更改字段的值,以便将它们作为文本粘贴到另一个div中。然而,它似乎只适用于原始硬编码字段(而不是克隆字段)。我试过在代码中的几个地方添加每个函数,但无济于事。 我的代码现在看起来像这样:
<div class="cartWrapper">
<div class="clonedInput">
<label for="chipsCategory" class="">Chips Category <span class="requiredField">*</span></label>
<select class="categoryName1 changeFields" name="chipsCategory">
<option value="Kraks">Kraks</option>
<option value="Curls">Curls</option>
<option value="Crisps">Crisps</option>
</select>
<label for="chipsTaste" class="">Choose Taste <span class="requiredField">*</span></label>
<select class="chipsTaste1 changeFields" name="chipsTaste">
<option value="brand_1">Brand 1</option>
<option value="brand_2">Brand 2</option>
<option value="brand_3">Brand 3</option>
</select>
<label for="chipsQty">Quantity <span class="requiredField">*</span></label>
<input type="number" value="1" class="changeFields chipsQty" name="chipsQty[">
</div>
<button class="clone">Clone</button>
</div>
</div>
<div id="pasteItems"></div>
和js:
$( document ).ready(function() {
function clone(){
$('.clonedInput:first')
.clone()
.appendTo(".cartWrapper")
.each(function(){})
.on('click','button.clone',clone).append('<button class="remove">Remove</button>')
.on('click','button.remove',remove);
}
function remove(){
$(this).parents(".clonedInput").remove();
}
$("button.clone").on("click", clone);
$("button.remove").on("click", remove);
function getValues() {
var categoryName = $('.categoryName1').val();
var chipsTaste = $('.chipsTaste1').val();
var chipsQty = $('.chipsQty').val();
$('#pasteItems').text(categoryName + ' ' + chipsTaste + ' ' + chipsQty);
}
getValues();
$('.changeFields').change(function(){
$(this).each(function(){
getValues();
});
});
});
非常感谢您的帮助!
答案 0 :(得分:3)
由于它们是动态创建的,因此无法以相同的方式选择它们(see Delegation)。所以你需要:
$(".cartWrapper").on('change', '.changeFields', function() {
//do what you need to with the value of the cloned input
});
答案 1 :(得分:1)
如果您在页面启动时实例化了输入,并且在触发页面就绪事件后未动态加载,则可以使用clone()向页面添加其他输入元素。
但是,您需要告诉jQuery您不仅要克隆输入元素,还要克隆其数据和事件侦听器。
通过将clone()代码更改为以下内容来执行此操作:
$( document ).ready(function() {
// clone(true,true) means -> .clone( [withDataAndEvents ] [, deepWithDataAndEvents ] )
function clone(){
$('.clonedInput:first')
.clone( true, true )
.appendTo(".cartWrapper")
.each(function(){})
.on('click','button.clone',clone).append('<button class="remove">Remove</button>')
.on('click','button.remove',remove);
}
您可以在此处阅读更多相关信息。 http://api.jquery.com/clone/
定义具有相同名称的函数时要小心,即使它位于不同的范围内。这可能会在以后引起混淆。最好将其命名为clone_now(),clone_once()或者clone_at_startup(),或者你喜欢命名你的函数。
希望这有帮助!