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");
});