我有以下代码来创建一些元素
<div id="parent">
<div id="block_1" >
<div>
<input type="text">
</div>
<img src="arrow.jpg">
<div>
<input type="text">
</div>
<div><a href="#" class="remove_block">Remove</a></div>
</div>
</div>
结果看起来像这样
当用户按下ADD按钮时,它将转到javascript函数并创建相同的div块。这是代码
function add_block() {
var curDiv = $('#parent');
var i = $('#parent div').size()/4 + 1;
var newDiv='<div id="block_'+ i + '" class="parent_div">' +
'<div>' +
'<input type="text">' +
'</div>' +
'<img src="arrow.jpg">' +
'<div>' +
'<input type="text">' +
'</div><div><a class="remove_block" href="#">Remove</a></div>' +
'</div>';
$(newDiv).appendTo(curDiv);
};
每当用户按下块左侧的“删除”链接时,应删除相应的块。这就是我所做的:
$('a.remove_block').on('click',function(events){
$(this).parents('div').eq(1).remove();
});
问题是只有原始块中的删除工作,其余的没有。谁知道为什么?
我是jQuery和javascript的新手,所以我非常感谢任何帮助和建议 注意:我使用jQuery 2.0.3
答案 0 :(得分:26)
因为它是动态内容,所以不能绑定静态内容之类的事件,它不会绑定到元素,因为它们在绑定时不会出现。
所以你应该像这样绑定事件:
$('#parent').on('click', 'a.remove_block', function(events){
$(this).parents('div').eq(1).remove();
});
答案 1 :(得分:3)
您需要为动态添加的元素使用事件委派。即使您使用了.on()
,使用的语法也不会使用事件委派。
当你注册一个普通事件时,它只将处理程序添加到那个时间点存在于dom中的那些元素,但是当使用事件委托时,处理程序被注册到执行时存在的元素并且被传递当事件冒泡到元素
时评估选择器$(document).on('click', '.remove_block', function(events){
$(this).parents('div').eq(1).remove();
});
答案 2 :(得分:0)
$('a.remove_block').on('click',function(events){
$(this).parents('.parent_div').remove();
return false;
});
答案 3 :(得分:0)
我遇到的情况是要删除的动态元素不是事件侦听器的后代:
siteSel.on('select2:select', function (e) {
// remove some other dynamic element on page.
});
我发现的解决方案是使用 when()方法。
siteSel.on('select2:select', function (e) {
let dynamicElement = $('.element');
$.when(dynamicElement).then(dynamicElement.remove());
});
答案 4 :(得分:-2)
你可以使用.live:
$('body').live('click','#idDinamicElement', function(){
// your code here
});