2010-02-18 14 views
8

Ho una tabella che viene aggiornata con ajax e dopo l'aggiornamento se ordinata, ma ho bisogno di ordinare non una colonna fissa ma la stessa colonna che è stata fatta l'ultimo clic prima dell'aggiornamento.Jquery Tablesorter ordina la stessa colonna dopo l'aggiornamento

function tableUpdated() { 
$(".tablesorter").trigger("update"); 
//alert($(".tablesorter").sorting); 
var sorting = [[7, 0]]; 
$("table").trigger("sorton", [sorting]); 
} 

Nel mio codice di cui sopra ho bisogno di mettere il mio indice di colonna selezionata invece di 7

risposta

5

jQuery di .data() vi aiuterà qui. Ogni volta che l'utente fa clic per ordinare una tabella, memorizza le colonne sul tavolo stesso. All'interno della funzione di ordinamento, aggiungere questo:

$("#table").data('sorting', selectedColumn); 

Ora l'elemento con id="table" ha una proprietà sorting con il valore di selectedColumn. In tableUpdated, è possibile utilizzare questi dati:

function tableUpdated() { 
    $(".tablesorter").trigger("update"); 
    var sorting = [[$("#table").data('sorting'), 0]]; 
    $("#table").trigger("sorton", [sorting]); 
} 

dati aggiunto utilizzando .data() può essere ancora più complessa, che consente di aggiungere oggetti di dati. Vedi this page per maggiori dettagli.

+0

Grazie, proverò ... –

+0

primo: grazie per questo. Secondo: lo 0 nella ricerca dei dati non lo imposta in modo ascendente \ decrescente (non ricordo quale sia) e non il valore selezionato dall'utente? – javamonkey79

+0

@ javamonkey79: Supponendo che sia lo 0, hai ragione. Questo potrebbe essere un altro buon posto per usare .data(). Salva la direzione dell'ordinamento come un'altra proprietà sulla tabella e aggiornala quando viene modificata la direzione dell'ordinamento. – Aaron

0

Dopo aver combattuto con questo per un giorno o così ho trovato il datatables plugin che ha salvato lo stato fuori dalla scatola. Spero che questo aiuti qualcun'altro.

3

Utilizzando il codice, è possibile fare qualcosa di simile (si supponga che il tavolo id è # lista-table) per mantenere la tabella corrente di ordinamento:

function tableUpdated() { 
    $("#list-table").trigger("update"); 
    var sorting = $("#list-table").get(0).config.sortList; 
    $("#list-table").trigger("sorton", [sorting]); 
} 
2

si può raccoglierlo sul 'sortEnd' evento sulla vostra tavola:

var lastSortList; 

$table.on('sortEnd', function(e) { 
    lastSortList = e.target.config.sortList; 
}); 
0

Qui si può ordinare con la stessa colonna e aggiungerne uno nuovo alla selezionatrice

var sorting = $("table").get(0).config.sortList; 
sorting.push([2,0]); // add an element to the array 
$("table").trigger("sorton", [sorting]); 
0

Potrebbe un po 'meno in testa di salvare l'ultimo tipo solo quando l'Ajax a partire in questo modo:

lastSortList=$("table")[0].config.sortList; 

Poi farlo tornare in dopo l'aggiornamento in questo modo:

$("table").trigger("sorton", [lastSortList]); 

Ricordate di dichiarare la prima linea nella giusta portata però.

Problemi correlati