我这里有一个动态添加行的表格示例。每一行都应触发事件:
$("#tblTest > tbody > tr").on("click", function(e){
alert();
});
此代码不适用于动态添加的行。问题出在哪里?
它在创建时将单击添加到 tr。 您需要改为攻击对tbody的点击,然后过滤到tr。
$("#tblTest > tbody").on("click", "tr", function(e){
alert();
});
您应该更改代码以使用 .on 事件的 body:
$("body").on("click", "#tblTest > tbody > tr", function(e){
alert();
});
动态添加行时,必须将新的 onClick 侦听器绑定到添加的元素。您的代码仅将侦听器添加到页面上已有的元素;不是新创建的元素。像这样的东西可以正常工作:
var AddRow = function(){
// add element
$("#tblTest > tbody").append("<tr><td>Test name</td><td>Last anme</td></tr>");
// add listener to new element
$("#tblTest > tbody > tr:last-of-type").on("click", function(e){
alert();
});
}
:last-of-type 伪选择器是避免将多个侦听器绑定到单元格的关键。
对于动态添加的元素,您需要使用事件委派:
$(document).on("click", "#tblTest > tbody > tr", function(e){
alert('test');
});
更新了代码笔。
像这样尝试。
$(function() {
$(document).on("click", "#tblTest > tbody > tr", function(e) {
alert();
});
});
您可以使用事件委派。
$(document).off('click.namespace').on('click.namespace', '#tblTest > tbody > tr', function (e) {
alert();
});
它将重新绑定事件。因此,动态追加的行也与事件绑定。