可能重复:
jQuery的-单击事件不起作用动态生成的元素
我只是有一个可点击添加按钮,增加了新的表行。 该表中的行包括删除按钮。 我注意到,当我动态地添加新行按钮不会触发click事件,但如果存在按钮,页面加载的时候,那么它工作正常。 我该如何纠正呢?
使用Javascript:
$('#btnAdd').click(function () {
var newTr = '<tr><td><input id="column_0" name="column[0]" style="width:40%;" type="text" /> <img alt="Delete-icon24x24" class="btnDel clickable" id="" src="/assets/delete-icon24x24.png" /></td></tr>';
$('#columns').append(newTr);
});
$('.btnDel').click(function () {
alert('hey');
console.log('test');
var row = $(this).closest("tr");
alert(row);
row.remove();
});
你需要使用事件代表团:
$("table").on("click", ".btnDel", function () {
/* Respond to click here */
});
原因是,你不能处理程序绑定到不目前在DOM存在的项目。 你可以,但是,绑定一个处理程序委托的目标(将留在DOM父元素)。 点击会冒泡的DOM,最终到达委托目标。
我们听的点击table
,我们评估他们是否从来到.btnDel
元素。 现在,这将响应来自点击.btnDel
元素加载页面时加载,以及那些动态以后添加。
最后,不要再使用ID值。
您需要使用上()事件代表团动态添加HTML元素。 您可以委派事件parent
动态添加元素的元素,如果你可以,或者你可以委托document
。
$(document).on('click', '.btnDel', function () {
alert('hey');
console.log('test');
var row = $(this).closest("tr");
alert(row);
row.remove();
});
委托事件
委托事件有优势,他们可以处理来自被添加到该文件在稍后的时间后代元素的事件。 通过挑选这是保证出席委派的事件处理程序连接时的元素,你可以使用委托的事件,以避免需要频繁安装和取下事件处理程序。
为了进一步理解阅读这篇文章, 了解事件代表团
使用on()
$(document).on('click', '.btnDel', function(){
//your code
})
这将工作
$('#btnAdd').click(function () {
var newTr = '<tr><td><input id="column_0"
name="column[0]"style="width:40%;"type="text" />
<img alt="Delete-icon24x24" class="btnDel clickable" id=""
src="/assets/delete- icon24x24.png" /></td></tr>';
$('#columns').append(newTr);
$('.btnDel').click(function () {
alert('hey');
console.log('test');
var row = $(this).closest("tr");
alert(row);
row.remove();
});
});