0

这是一个非常琐碎的代码,但我不知道问题出在哪里。所以我在我的客户端上有这个代码:

socket.on('newRoom', function (data){
    var newTr = $("<tr>");
    newTr.attr("data-id", data.roomId);
    $('table').append(newTr);
});

这是我要执行的代码:

$('table tr').on('click', function() {
    console.log($(this).data("id")); /* This code doesnt't work */
    console.log("test"); /* This code works */
});

有人可以帮我吗?

4

2 回答 2

0

尝试使用这个:

console.log($(this).attr("data-id"));

而不是你的代码。

于 2013-05-22T17:30:37.850 回答
0

您可能在添加到 DOM 之前安装了事件处理程序tr在您的示例中,您使用的是直接事件,仅当目标元素 ( table tr) 已存在于 DOM 中时才有效。

要处理(尚未)在 DOM 中的元素的事件,您需要使用事件委托

$('table').on('click', 'tr', function() {
  console.log($(this).data("id"));
  console.log("test");
});

这样,事件处理程序被附加到已经在 DOM 中的元素(该table元素,尽管我假设它也没有生成),并且click事件将被委托给(动态插入tr的)元素。

于 2013-05-22T17:54:14.093 回答