给定jQuery Datatable,如何确定某个列是否发生点击?

我有一个jQuery DataTable实例,其中填充了各种数据,这些数据是数据库记录的摘要。当前,单击一行将打开一个对话框,其中包含相应数据库记录的所有字段。我想做的是,如果单击的列具有指定的类“ comments”,则打开第二个对话框

目前,我通过初始化数据表

timelineTable = $("#timeline_table").dataTable({
    "aLengthMenu" : [
        ["-1", "10", "25", "50", "100"],
        ["All", "10", "25", "50", "100"]
    ],
    "iDisplayLength" : -1,
    "aoColumnDefs" : [
        {"bVisible" : false, "aTargets" : [6, 8] },
        {"sClass" : "comments", "aTargets" : [7]} //adds class 'comments' to this column index
    ]
});


并将click事件绑定到动态填充的行:

$("#timeline_table").on("click", "tbody tr", timelineTableClickHandler);


这对于打开详细信息对话框的默认操作效果很好,但是我想将函数处理程序修改为

$("#timeline_table").on("click", "tbody tr", function(e){
  if ($(this).closest("td").hasClass("comments"))
    //call secondary dialog open event
  else
    //call default dialog open event
});


但是,$(this).closest("td").hasClass("comments")返回的是未定义的,当我在Firebug中给它设置断点时,以下命令和输出结果

$(this).attr("id") prints out row id
$(this).closest("td") prints out jQuery( )
$(this).closest("td").text() prints out "", should be 0

最佳答案

问题出在这里this指向tr,因为您众所周知tdtr的子代,所以您不能在this上使用.closest()来查找单击的td

相反,您可以使用targetevent属性找到事件的实际来源并找到该元素的closest td

$("#timeline_table").on("click", "tbody tr", function(e){
  if ($(e.target).closest("td").hasClass("comments"))
    //call secondary dialog open event
  else
    //call default dialog open event
});

关于javascript - jQuery DataTable-单击时获取最接近的td元素的类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18523106/

10-12 13:01
查看更多