2013-08-30 75 views
1

給定一個jQuery Datatable,如何確定點擊是否發生在某個列上?jQuery DataTable - 獲取點擊最接近的td元素的類

我有一個jQuery 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 
    ] 
}); 

初始化數據表中,並有綁定到動態填充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")被返回undefined,當我把一個斷點,在Firebug的,下面的命令和輸出結果

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

回答

2

的問題是在這裏this是指向tr,你很清楚tdtr一個孩子,所以你不能使用在this.closest()找到點擊TD

相反,你可以使用eventtarget屬性查找實際事件和源找到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 
}); 
1

有一個錯誤,我想到的。

tr沒有最接近的td,因爲td是tr的子女。 與tr最接近的元素是regularry 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 

});