2010-12-27 13 views
2

Im zu Daten anhängen an einem Tisch mit dem tablesorter Plugin versuchen (http://tablesorter.com) Im den folgenden Code verwenden:JQuery tablesorter beigefügten Datensortierung nicht

<table id="sortme" border="1" style="width: 200px;">    
<thead> 
    <tr> 
     <th>first name</th> 
     <th>last name</th> 
     <th>age</th> 
    </tr> 
</thead> 
<tbody> 
     <tr> 
      <td>will</td> 
      <td>smith</td> 
      <td>1</td> 
     </tr> 
................... 
</tbody> 
</table> 
<a href="#" id="test">Click me!</a> 

Und:

$(document).ready(function() { 
var i = 5; 
$("#sortme").tablesorter({ 
    sortList: [[2,0]]   
}); 
$("#test").click(function() { 
    $("#sortme tbody").append('<tr><td>NEW</td><td>NEW</td><td>'+(i++)+'</td></tr>'); 
    $("#sortme").trigger("update"); 
    var s = [[2,0]]; 
    $("#sortme").trigger("sorton",[s]); 
    return false; 
}); 
}); 

Problem ist die angehängte Zeile bleibt oben, warum? Siehe Beispiel: http://jsfiddle.net/jmU3Z/8/

Antwort

-1

Ihr Problem ist die [s]. Ihr sort-Parameter ist bereits ein Array, übergeben Sie ihm einfach die Variable und nicht die Variable in einem Array.

$("#sortme").trigger("sorton",s); 

Funktioniert für mich, FF4.

+0

Works, sondern erzeugt einen Fehler: [1] ist undefiniert http: // tablesorter .com/jquery.tablesorter.js Zeile: 573 – Linus

+0

Ich denke, ich habe es gefunden. In dem Konstruktor von tablesorter rufen sie 'BuildHeaders' auf, um eine Liste von Spalten zu erhalten, die sie sortieren können, und' BuildCache', um sie zu sortieren. Wenn Sie ein Update aufrufen, wird nur der Cache erstellt (statt die Tabelle erneut zu instanziieren). Vielleicht ist dies ein Fehler oder eine undokumentierte Funktion. Auf jeden Fall wird das Konstrukt [wie in der neuesten Version gesehen] (http://jsfiddle.net/jmU3Z/14/) erneut aufgerufen, um den Cache neu aufzubauen und richtig zu sortieren. Auch sehr wahrscheinlich erwähnenswert für den Schöpfer. ;-) –

+0

Ja, das funktioniert, aber nicht so hübsch =/ Nun, es ist eine Lösung, und nicht so schwer, den Update-Code Patch. Danke – Linus

1

Falls jemand darüber stolpert.

Zu dem Zeitpunkt, an dem das Ereignis "sorton" behandelt wird, wurde dem DOM nicht die Datei table.config.parsers zugewiesen. Die "sorton" -Ereignisbehandlung muss in ein Zeitlimit von 1 Millisekunde eingeschlossen werden.

Ersetzen des bestehenden "sorton" bind in jquery.tablesorter.js (line ~ 803) mit folgendem:

}).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);