Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery DataTable-单击获取最近的td元素的类_Javascript_Jquery_Datatable - Fatal编程技术网

Javascript jQuery DataTable-单击获取最近的td元素的类

Javascript jQuery DataTable-单击获取最近的td元素的类,javascript,jquery,datatable,Javascript,Jquery,Datatable,给定一个jQuery数据表,如何确定某个列上是否发生了单击 我有一个jQuery DataTable实例,其中填充了各种数据,这些数据是数据库记录的摘要。当前,单击一行将打开一个对话框,其中包含相应数据库记录的所有字段。如果单击的列具有指定的类“comments”,我要做的是打开第二个对话框 目前,我通过初始化datatable timelineTable = $("#timeline_table").dataTable({ "aLengthMenu" : [ ["-1"

给定一个jQuery数据表,如何确定某个列上是否发生了单击

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

目前,我通过初始化datatable

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
    ]
});
并将单击事件绑定到动态填充的行:

$("#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.nexist(“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
,正如您所知道的
td
tr
的子代,因此您无法在
this
上使用来查找单击的td

相反,您可以使用
事件的
target
属性来查找事件的实际来源,并查找该元素最近的
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
});

我想这是个错误

tr没有最近的td,因为td是tr的子女。 距离tr最近的元素是Regulary tbody或table

要访问td,您必须使用:

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