2008-10-29 9 views
17

J'utilise le plugin jQuery tableSorter sur une page. Malheureusement, la table en cours de tri est modifiée dynamiquement, et quand je trier après l'ajout d'un élément, l'élément disparaît, restaurant la table à l'état dans lequel elle était lors de la création de la tableSorter.Utilisation de jQuery tableSorter sur une table modifiée dynamiquement

Est-il possible que je puisse forcer tableSorter à réanalyser la page afin que ces nouveaux éléments soient triés correctement?

Répondre

21

Je crois que vous pouvez déclencher une mise à jour en utilisant quelque chose comme:

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

semble que vous avez raison.

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

fait l'affaire. Comme une note, l'API tablesorter a changé à un moment donné, donc ces choses ont été modifiées, ainsi que la liaison d'événements. Mon plus gros problème était de comprendre pourquoi certaines choses fonctionnaient et d'autres pas, et cela était dû à une mauvaise version du plugin, bien qu'il n'y ait pas de distinction évidente.

+0

Ceci devrait être la réponse acceptée. Sans la partie "appendCache", je ne peux trier que dans un seul sens (le premier clic trie, le second ne fait rien), comme dans la réponse de Josh. Mais avec cela, tout fonctionne comme prévu. Notez que si la mise à jour se produit dans un autre bloc de code à partir duquel vous avez créé votre objet tablesorter, vous pouvez simplement le recréer ici. Supposons que votre table tabes a l'ID "ts". Do $ ("# ts"). Tablesorter(). Trigger ("mise à jour"); 'et même pour' appendCache'. Ou: '$ table = $ (" # ts "). Tablesorter(); $ table.trigger ("mise à jour"); $ table.trigger ("appendCache"); ' –

+0

D'un autre côté, je viens de découvrir que cette réponse ne fonctionnera pas si vous venez de supprimer une ligne. Je ne suis pas sûr que vous ayez vraiment besoin de faire quoi que ce soit si vous supprimez une ligne. –

3

Le $(table).trigger("update"); jette l'erreur

Uncaught TypeError: Cannot read property 'rows' of undefined 

Donc, il y a une fonction jquery .ajaxStop()tablesorter() est appelé. Ne pas appeler tablesorter dans .ready()

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

qui a fait le travail

0

Pour les débutants comme moi qui font face à problème avec table de tri dynamique générée, est la solution ici. La réponse donnée précédemment est correcte, mais où placez-vous cette commande?

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

Vous devez le placer dès que vous avez ajouté les données à la table. Ex dans mon cas

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'); 
Questions connexes