2010-10-26 127 views
4

我使用tablesorter 2.0,並使用ajax更新單元格的值。在調用之後,我需要重新命令行,但是$('#thisTable')。trigger('update')對我沒有幫助。JQuery tablesorter插件 - 修改行後更新排序

我在處理單元格內的標記,但它不是問題。

$('#thisTable').tablesorter({ 
    textExtraction: function(node) { 
    return node.getElementsByTagName('input')[0].value; 
    } 
}); 

任何幫助,將不勝感激。

- 克里

回答

3

您可以在表中分揀docs答案。您必須觸發另一個事件sorton

+0

是的,我讀過它,但我不知道,哪一列在更新之前被排序... sorton需要排序列作爲參數。 – kree 2010-10-26 08:49:30

+1

實際的排序列存儲在:$('#thisTable')。get(0).config.sortList。如果它未定義,則可以添加一些默認排序。 – Beniamin 2010-10-26 09:32:32

+0

謝謝!就是這樣,我需要的! :) – kree 2010-10-26 10:31:26

1

這是我的代碼

//append some content to the tbody 
$('table').trigger('update');  
var $sort = $('table').get(0).config.sortList; 
$("table").trigger("sorton",[$sort]); 

後,我添加一些行表體以上被調用。我能夠看到$ sort值,但觸發器函數沒有對新添加的行進行排序。

+1

我啓用了表分揀機的調試模式。更新觸發器更新表緩存,但sorton觸發器正在對先前緩存的數據進行排序。所以新數據沒有被排序。爲了使它們同步化,我把$(「table」)。trigger(「sorton」,[$ sort]);在setTimoutblock中延遲50ms。但這只是一個解決方法,但這不是我想的正確解決方法。有人可以提出適當的解決辦法嗎? – Aditya 2012-01-23 07:45:58

1

我已經在源代碼中有一個小的改變。我已經向更新事件處理程序添加了一個參數來請求排序。

$("#MyTable").trigger('update')將照常工作。

$("#MyTable").trigger('update', true)將在更新後要求排序。

$this.bind("update", function (e, sort) { 
    var me = this; 
    setTimeout(function() { 
     // rebuild parsers. 
     me.config.parsers = buildParserCache(
     me, $headers); 
     // rebuild the cache map 
     cache = buildCache(me); 
     // ADDED 
     if (sort) $(me).trigger('sorton', [me.config.sortList]); 
    }, 1); 
}); 
+0

這應該是tablesorter源的一個可接受的功能。你有沒有嘗試在github上貢獻這個?不確定關於sorton的觸發。可能有更直接的方法? – mwallisch 2015-07-01 20:22:06

0

關於以「更新」活動的實施, 它執行1毫秒的超時後更新。 eather這個函數應該在表格分揀機中重寫,使用回調進行讀取。

$this.bind("update", function() { 
    var me = this; 
    setTimeout(function() { 
    // rebuild parsers. 
    me.config.parsers = buildParserCache(
    me, $headers); 
    // rebuild the cache map 
    cache = buildCache(me); 
}, 1);