我正在使用BootStarp3
作为骨架。我正在动态创建多个元素(在按钮单击时),可以选择使用另一个按钮删除每个创建的元素。问题是我只能删除第一个元素,其他创建的动态按钮似乎没有反应,无法弄清楚出了什么问题。
JSfiddle代码在这里。
HTML:
<div id="reward-container">
<div class="center-block col-lg-10 col-md-10 col-sm-12 text-left" id="">
<div class="center-block col-centered bg-white review text-left">
<div class="row">
<div class="col-lg-6 col-md-5 col-sm-5">
<div class="form-group form-group-default">
<label>label</label>
<input type="text" class="form-control" placeholder="e.g">
</div>
</div>
</div>
</div>
<button class="btn btn-sm pull-right remove"><b>Remove</b></button>
</div>
</div>
<button class="btn btn-lg btn-info m-t-70 marg" id="add">add more</button>
JS:
$("#add").click(function(){
var count = $("#reward-container").children();
existingRewards = $("#reward-container").children();
var newGift = $('<div class="center-block col-lg-10 col-md-10 col-sm-12 text-left marg" id='+count+'> \
<div class="center-block col-centered bg-white review text-left"> \
<div class="row"> \
<div class="col-lg-6 col-md-5 col-sm-5"> \
<div class="form-group form-group-default"> \
<label class="to-uppercase">label</label> \
<input type="text" class="form-control" placeholder="e.g"> \
</div> \
</div> \
</div> \
</div> \
<button class="btn btn-sm pull-right remove"><b>Remove</b></button> \
</div>');
$(newGift).appendTo("#reward-container");
});
//remove field
$(".remove").click(function(e){
console.log("remove clicked");
var father=e.target.parentElement.parentElement;
existingRewards = $("#reward-container").children();
if(existingRewards.length==1){
console.log("one field remains");
}else{
$(father).remove();
}
});
答案 0 :(得分:6)
那是因为你需要事件委托。目前,您已将点击处理程序附加到.remove
元素,但它们不存在(您可以动态生成它们)。要捕获新元素的单击,请将单击处理程序更改为以下内容:
$("#reward-container").on("click", ".remove", function (e) { ... });
您还可以使用closest
方法改进功能,而不是使用父级导航:
$("#reward-container").on("click", ".remove", function(e){
console.log("remove clicked");
var $div = $(this).closest("div.center-block");
existingRewards = $("#reward-container").children();
if(existingRewards.length==1){
console.log("one field remains");
}else{
$div.remove();
}
});
有关详细信息,请参阅我的其他类似答案:
答案 1 :(得分:0)
在绑定click for remove时,只有一个元素具有类remove
。添加其他元素时,应再次绑定该单击。
$("#add").click(function(){
var count = $("#reward-container").children();
existingRewards = $("#reward-container").children();
var newGift = $('<div class="center-block col-lg-10 col-md-10 col-sm-12 text-left marg" id='+count+'> \
<div class="center-block col-centered bg-white review text-left"> \
<div class="row"> \
<div class="col-lg-6 col-md-5 col-sm-5"> \
<div class="form-group form-group-default"> \
<label class="to-uppercase">label</label> \
<input type="text" class="form-control" placeholder="e.g"> \
</div> \
</div> \
</div> \
</div> \
<button class="btn btn-sm pull-right remove"><b>Remove</b></button> \
</div>');
$(newGift).appendTo("#reward-container");
$(".remove").click(function(e){
console.log("remove clicked");
var father=e.target.parentElement.parentElement;
existingRewards = $("#reward-container").children();
if(existingRewards.length==1){
console.log("one field remains");
}else{
$(father).remove();
}
});
//remove field
$(".remove").click(function(e){
console.log("remove clicked");
var father=e.target.parentElement.parentElement;
existingRewards = $("#reward-container").children();
if(existingRewards.length==1){
console.log("one field remains");
}else{
$(father).remove();
}
});
答案 2 :(得分:0)
如http://www.pyimagesearch.com/2015/07/20/install-opencv-3-0-and-python-3-4-on-ubuntu/所示 ,你必须使用
$('body').on('click', '.remove', function() {
// do something
});
而不是
$(".remove").click( function() {
// do something
});