我试图检测表格行的点击,但我遇到了问题。该表是从javascript文件生成的,并放在html内的div内。该div名为'tableOutput'。如果我将它设置为'tableOutput',我的jquery click函数将起作用,但是我将它设置为'#myTable'或'#myTable tr'它将不会执行任何操作。有什么建议?谢谢!
生成表格的代码:
function loadUsers() {
$.getJSON("api/users", function(data) {
var userTable = "\
<table id=\"mt\" class=\"table table-hover\"><tr><th>User ID</th><th>User Name</th><th>Password</th><th>First Name</th><th>Last Name</th><th>Email</th><th>Phone</th><th>DOB</th><th>Enabled</th></tr>";
var count = 1;
$.each(data, function(key, value) {
userTable = userTable + "<tr id=\"tr" + count + "\"><td>" + value["userID"] + "</td><td>" + value["userName"] + "</td><td>" + value["password"] + "</td><td>" + value["firstName"] + "</td><td>" + value["lastName"] + "</td><td>" + value["email"] + "</td><td>" + value["phone"] + "</td><td>" + value["dateOfBirth"] + "</td><td>" + value["enabled"] + "</td></tr>";
count = count + 1;
});
userTable = userTable + "</table>";
$("#tableOutput").html(userTable);
}
);
}
检测点击的代码:
$(document).ready(function() {
$('#dp1').datepicker();
loadUsers();
$('#mt tr').on("click", function(){
alert($(this).attr("id"));
});
});
答案 0 :(得分:7)
您需要event delegation将事件绑定到动态添加的元素。由于您拥有表格的静态父级,ID为tableOutput
的div可以将事件委托给它。
$('#tableOutput').on("click", '#myTable tr', function(){
alert($(this).attr("id"));
});
委派活动
委派事件的优势在于它们可以处理来自的事件 稍后添加到文档中的后代元素。通过 选择一个保证在当时存在的元素 委托事件处理程序附加,您可以使用委托事件 避免经常附加和删除事件处理程序,jQuery docs