2008-10-29 9 views
17

Estoy utilizando el plugin jQuery tableSorter en una página.Uso de jQuery tableSorter en la tabla modificada dinámicamente

Desafortunadamente, la tabla que se está ordenando se modifica dinámicamente, y cuando ordeno después de agregar un elemento, el elemento desaparece, restaurando la tabla al estado en que estaba cuando se creó tableSorter.

¿Hay alguna manera de forzar a TableSorter a volver a examinar la página para que estos elementos nuevos estén ordenados correctamente?

Respuesta

21

Creo que se puede desencadenar una actualización usando algo como:

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

Parece que son correctos.

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

hace el truco.

Como nota, la API de tablesorter cambió en algún momento, por lo que estas cosas se cambiaron, así como el enlace del evento. Lo que más me molestaba era tratar de descubrir por qué algunas cosas funcionaban y otras no, y era por tener una versión incorrecta del complemento, a pesar de que no había una distinción obvia.

+0

Esta debería ser la respuesta aceptada. Sin la parte "appendCache", solo puedo ordenar en una dirección (1º clic ordena, 2º no hace nada), como en la respuesta de Josh. Pero con eso, todo funciona como se espera. Tenga en cuenta que si la actualización ocurre en otro bloque de código desde donde creó su objeto de tablesorter, puede simplemente recrearlo allí. Supongamos que su tabs de tablesorter tiene id "ts". Haga '$ (" # ts "). Tablesorter(). Trigger (" update ");' y lo mismo para 'appendCache'. O bien: '$ table = $ (" # ts "). Tablesorter(); $ table.trigger ("actualización"); $ table.trigger ("appendCache"); ' –

+0

Por otro lado, descubrí que esta respuesta no funcionará si acaba de eliminar una fila. No estoy seguro de que realmente deba hacer algo si elimina una fila. –

3

El $(table).trigger("update"); tiros de error

Uncaught TypeError: Cannot read property 'rows' of undefined 

Por lo tanto, hay una función de jQuery .ajaxStop() donde tablesorter() se llama. No llame tablesorter en .ready()

jQuery(document).ajaxStop(function(){ 
     jQuery("#table_name").tablesorter(); 
    }) 

el que hizo el trabajo

0

Para los novatos como yo que se enfrentan problema con mesa de selección generada dinámico, aquí está la solución. La respuesta dada anteriormente es correcta, pero ¿dónde coloca este comando?

$('#tableId').tablesorter().trigger('update'); 

Debe colocarlo tan pronto como haya agregado los datos a la tabla. Ex en mi caso

var tableData = "<thead><tr><th>Name</th><th>Age</th></thead><tbody><tr><td>Izaki</td><td>24</td><tr><tr><td>Serizawa</td><td>25</td></tr>"; 
$('#tableId').html('tableData'); 
$('#tableId').tablesorter().trigger('update'); 
Cuestiones relacionadas