jQuery:。新元素上的数据(“id”)不';行不通
这是一个非常琐碎的代码,但我不知道问题出在哪里。 因此,我的客户上有以下代码:jQuery:。新元素上的数据(“id”)不';行不通,jquery,Jquery,这是一个非常琐碎的代码,但我不知道问题出在哪里。 因此,我的客户上有以下代码: socket.on('newRoom', function (data){ var newTr = $("<tr>"); newTr.attr("data-id", data.roomId); $('table').append(newTr); }); 有人能帮我吗?试试这个: console.log($(this).attr("data-id")); 而不是您的代码。您可能正
socket.on('newRoom', function (data){
var newTr = $("<tr>");
newTr.attr("data-id", data.roomId);
$('table').append(newTr);
});
有人能帮我吗?试试这个:
console.log($(this).attr("data-id"));
而不是您的代码。您可能正在将
tr
添加到DOM之前安装事件处理程序。在您的示例中,您使用的是直接事件,只有当目标元素(table tr
)已经存在于DOM中时,直接事件才起作用
要处理DOM中(尚未)的元素的事件,需要使用:
这样,事件处理程序被附加到一个已经在DOM中的元素(表
元素,尽管我假设它也没有生成),并且单击事件将被委托给(动态插入的)tr
元素.当您说不起作用时…控制台是否只是显示未定义的
?为什么要首先使用数据属性?如果您有一个连续元素的数据结构,为什么要使用DOM来存储关于它们的信息呢?将有关它们的信息存储在JavaScript对象中,并将其数据绑定到DOM。如果您相信您的DOM是应用程序的真实来源,那么最终可能会遇到设计问题?您的事件是如何触发的,因为它是一个动态元素,并且您没有重新绑定事件或使用事件委派?@TheFilipo没有数据。roomId
实际上包含一个正确的值?我不认为是这样。控制台.log(“test”)
仍在OP的原始代码中启动。
console.log($(this).attr("data-id"));
$('table').on('click', 'tr', function() {
console.log($(this).data("id"));
console.log("test");
});