2012-02-19 52 views
1

我使用jQuery的排序插件時發現:jQuery的表插件

http://tablesorter.com/docs/

我能得到它的靜態工作表中。但現在我試圖讓它在一個使用ajax從數據庫填充的表上工作。我覺得我把這個代碼:

$(document).ready(function(){ $("#myTable").tablesorter(); }); 

在錯誤的地方。我只是把它放在頁面頂部的Javascript標籤中。由於表不斷刷新,我想我可能需要再次調用上面的代碼。它應該在ajax調用還是什麼?

+0

jQuery的數據表聽起來像是一個更適合你的需求:http://datatables.net/ – 2012-02-19 17:32:08

回答

3

是的,你應該在創建動態表的ajax成功處理程序中執行它。這是因爲在應用插件之前,jQuery應該能夠在頁面上找到元素。由於您正在動態創建它,因此如果您準備好在document上執行代碼,它將無法找到它。

$.ajax(function(){ 
    .. 
    success: function(){ 
     //Other code to create the dynamic table 
     $("#myTable").tablesorter(); 
    } 
    .. 
}); 

更新:

如果您清空現有行,只是刷新與新行(數據)相同的表,那麼你有可能引發對錶update事件。

$("myTable").trigger("update"); 
+0

那工作後填充表,但如果Ire填充表,然後排序舊錶彈​​出備份 – searayman 2012-02-19 17:36:50

+0

我認爲OP意味着該表是靜態的,表數據(tr,td)是什麼會改變後的ajax調用。這段代碼已經創建了插件,所以它不會再創建它。 – mgibsonbr 2012-02-19 17:36:58

+0

@searayman - 我在想你正在創建一個新表格。但如果你只是刷新同一張桌子,請看看我編輯的答案。 – ShankarSangoli 2012-02-19 17:43:13

1

請檢查您的插件文檔,可能有一種方法可以在數據更改後對其進行重新排序。 This example可能是你要找的。它使用空數據創建一次表格分揀機。插入數據時,會觸發更新:

$("table").trigger("update"); 

這是每個ajax調用後應該使用的代碼。您的原始代碼應保持原樣(僅運行一次)。完整的例子是這樣的:

$(document).ready(function(){ 
    $("#myTable").tablesorter(); 
    $.ajax(function(){ 
     .. 
     success: function(){ 
      // Update your table data (remove and insert tr, tds etc) 
      $("#myTable").trigger("update"); 
      // If your sorting conditions changed, use also: 
      $("#myTable").trigger("sorton",[sortingConditions]); 
     } 
     .. 
    }); 
}); 

(從你複製的代碼片段和ShankarSangoli的答案)