2010-12-16 82 views
16

剛剛更新到最新的tablesorter,看起來像它的破或什麼的。每次我嘗試打開我的網頁,螢火蟲說:jQuery Tablesorter錯誤

table.config.parsers未定義

它只是打破了所有我的Javascript。 如果我恢復tablesorter版本,它會正常工作。

的Javascript:

$("#List").tablesorter({ 
    widgets: ['zebra'], 
    headers: { 
     4: { sorter: false } 
    } 
}) 

HTML:

<table id="List" class="tablesort ui-widget-content ui-corner-top"> 
    <thead> 
     <tr class="ui-widget"> 
      <th>Pa&iacute;s</th> 
      <th>ISO</th> 
      <th>ISO3</th> 
      <th>CODE</th> 
      <th>&nbsp;</th> 
     </tr> 
    </thead> 
    <tbody> 
    </tbody> 
</table> 
+0

經過的最新版本的文檔......可它可能是一些函數簽名已更改......或配置 – Vivek 2010-12-16 11:21:43

+0

只是使用基本的東西...他們並沒有改變主tablesorter()函數,確定它:P – alexandre 2010-12-16 11:23:37

+0

我們可以看到你的JavaScript和HTML? – Nalum 2010-12-16 11:34:28

回答

13

有點晚了,但是,那是因爲你在<tbody>一個空的/沒有<tr>元素,它預計至少一個<tr>

+3

我們設法解決這個問題的一種方法是,首先用一個虛擬開頭,不管表是否有任何數據,然後在文檔加載時通過js隱藏它。 – 2012-02-08 19:44:37

14

我剛剛遇到了這個錯誤,所以我想我會發佈一個響應,以防其他人以後遇到麻煩。

雖然上面的答案沒有提到它,但我能夠通過首先實例化tablesorter()並觸發排序請求來複制錯誤。

// populate our table body with rows 
$("#myTable tbody").html(json.tbody); 

// let the sorting plugin know that we made a update 
$("#myTable").trigger("update"); 

// set sorting column and direction, this will sort on the first and third column 
var sorting = [[2,1],[0,0]]; 

// sort 
$("#myTable").trigger("sorton",[sorting]); 

「更新」和「sorton」事件的結合似乎是:

追加或通過AJAX新的數據替換現有的表數據時,或以其他方式,像這樣的事件這種秩序是必要的引發錯誤。在處理「sorton」事件時,DOM尚未被分配table.config.parsers - 因此是錯誤。

此修復程序是在1毫秒超時中處理「sorton」事件處理。

用以下替換現有的 「sorton」 在jquery.tablesorter.js(行〜803)綁定:

}).bind("sorton", function (e, list) { 
    var me = this; 
    setTimeout(function() { 
     $(this).trigger("sortStart"); 
     config.sortList = list; 
     // update and store the sortlist 
     var sortList = config.sortList; 
     // update header count index 
     updateHeaderSortCount(me, sortList); 
     // set css for headers 
     setHeadersCss(me, $headers, sortList, sortCSS); 
     // sort the table and append it to the dom 
     appendToTable(me, multisort(me, sortList, cache)); 
    }, 1); 

tablesorter()確實是一個方便的插件。感謝Christian發佈它。

0

另一個答案是爲了防止任何人遇到同樣的情況。很明顯,表格分類器有時會在空的<tr>內有一個匹配數量的空<td>元素(與您的標題元素相同)。我的部分示例如下

<thead> 
    <tr> 
     <th class="{sorter: 'text'}'' "><a href="javascript:;" title="Sort" class="arrow"><span>Network Name</span></a></th> 
     <th class="{sorter: 'text'} "><a href="javascript:;" title="Sort" class="arrow"><span>Type</span></a></th> 
     <th class="{sorter: false}"><a href="javascript:;" title="Sort" class="arrow"><span>Interconnections</span></a></th> 
     <th class="{sorter: false}">&nbsp;</th> 
    </tr> 
</thead> 

<tbody> 
    <tr style="display:none"><td></td><td></td><td></td><td></td></tr>......................... 
1

我嘗試了上面的一些答案,但他們沒有幫助我們使用tablesorter的每個頁面。我認爲錯誤的主要原因是c = sortList [i] [0]是不確定的,因爲我們有一個空的TR或者我們沒有TH的相同數量的TD。

我有8 TH/TD的情況下,如果我有表格數據和8 TH &單個TD的情況下,我什麼都沒有顯示。我設法檢查是否沒有表格數據,然後不調用tablesorter對不存在的特定列進行排序。這個伎倆。可以幫助別人有類似的情況

if(tableData.length != 0){ 
 
    $("#myid").tablesorter({sortList: [[2,0]]}); 
 
}

+0

這對我有幫助。謝謝!我只是使用'.filter(function(){return {$ this(this).find(「tbody> tr」).length> 0; })。tablesorter(....)'來過濾掉它們。 (我也使用'sortList',不知道是否會影響它。) – 2016-07-18 20:39:54

1

這個問題似乎是,如果該表通過JavaScript充滿除非瀏覽器中顯示的新內容的tablesorter沒有找到新的內容。

在setTimeout()函數內激發tablesorter爲我刪除了該錯誤。

function initPage() { 
     fillMyTable(); 
     // Init table sorter, but give the browser a second to draw the new table 
     setTimeout(function(){ $("#my_table").tablesorter(); }, 1000); 
    } 
0

。注意的tablesorter AJAX example只展示了一個方案,其中新行附加到現有的。當表被動態清空並重新填充新行時,上述錯誤表面。

添加一個空行

<tr style="display:none"><td></td>...<td></td></tr> 

具有相同數目的<td> S作爲的<th> S IN的報頭中的數去除錯誤,但引入了另一個問題:該表被清空並用真實的行重新填充後,新的行被附加到舊的行。

至於修改的tablesorter源代碼的替代方案,請嘗試以下調用順序:

$("#my-table").trigger("update"); 
setTimeout(function() { 
    /* e.g. sort by the second column in descending order */ 
    var sorting = [[1, 1]]; 
    $("#my-table").trigger("sorton", [sorting]); 
}, 100);