检测使用JQuery从Generated Table中单击Table Row

时间:2014-03-24 19:37:51

标签: javascript jquery html

我试图检测表格行的点击,但我遇到了问题。该表是从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"));
});
});

1 个答案:

答案 0 :(得分:7)

您需要event delegation将事件绑定到动态添加的元素。由于您拥有表格的静态父级,ID为tableOutput的div可以将事件委托给它。

$('#tableOutput').on("click", '#myTable tr', function(){
    alert($(this).attr("id"));
});

委派活动

  

委派事件的优势在于它们可以处理来自的事件   稍后添加到文档中的后代元素。通过   选择一个保证在当时存在的元素   委托事件处理程序附加,您可以使用委托事件   避免经常附加和删除事件处理程序,jQuery docs