Comment maintenir jQuery DataTables la position de défilement après .draw()
Je suis à l'aide de jQuery Datatables plugin pour un affichage en tableau (12 lignes). Certains <input type="text" ...
des champs d'édition. Lorsque le champ perd le focus j'ai besoin de valider sa valeur et éventuellement modifier la valeur du champ. Je n'ai pas été en mesure d'obtenir modifiés champ de saisie de valeurs pour être reconnu par les tables de données sans l'émission d'un .draw()
par la suite, mais cela provoque la table pour faire défiler vers le haut de la table.
Est-il un moyen de maintien de la position de défilement après l'émission d'une .draw()?
$('#mytable').on('blur', 'input', function (e) {
var inputFieldId = this.id;
var inputFieldVal = $(this).val();
{ ... perform validation of field value ... }
$('#mytable').DataTable().rows().invalidate().draw();
});
MODIFIER
J'ai vu quelqu'un essaie de faire la même chose que je suis et ils ont indiqué que le code suivant a travaillé pour eux. Cela semble être un moyen très simple de réaliser ce dont j'ai besoin, mais je suis toujours scrollTop = 0 moi-même. Quelqu'un voit comment je peux obtenir le rang de l'indice de la ligne sélectionnée?
var scrollPos = $(".dataTables_scrollBody").scrollTop();
$('#mytable').DataTable().rows().invalidate().draw(false);
$(".dataTables_scrollBody").scrollTop(scrollPos);
Juste au cas où vous avez plusieurs tables de données avec le même nom de classe, vous devriez utiliser le sélecteur d'ID $("#divContrainer1 > .dataTables_scrollBody").scrollTop()
Oui, vous pouvez le faire. Avec un sale hack, mais vous pouvez. Chercher ma réponse ci-dessous.
OriginalL'auteur rwkiii | 2014-12-27
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas que vous pouvez faire, mais vous pouvez utiliser la fonction de Rappel à la place:
Ref : https://datatables.net/examples/server_side/select_rows.html
vous pouvez ajouter et attribut ID pour l'un de votre élément de ligne, puis yous $('body').scrollTo('#cible"); après l'édition de votre élément. si mon explication n'est pas assez clair dites le moi.
OriginalL'auteur JC Sama
Cela semble fonctionner pour moi. J'ai juste eu à trouver la
div.dataTables_scrollBody
après la table a été tiré.sauvé mon temps. Merci
OriginalL'auteur Paul Matthew
Voulais juste ajouter ceci ici, mais c'est un peu différente de scénario travaillé pour mon cas et sera probablement utile à certains autres qui viennent ici à la recherche de réponses.
Je suis en utilisant le côté de serveur de traitement et de faire une actualisation des données de la table une fois toutes les 10 secondes avec
table.ajax.reload()
. Cette fonction accepte un argument pour le maintien de la pagination de la valeur, mais ne parvient pas à maintenir la position de défilement. La solution était très semblable à celui de l'OP mentionné et définit la position de défilement sur le rappel. Je ne sais pas pourquoi il ne fonctionne pas pour lui, mais ici, c'est l'intervalle de code que j'utilise avec succès:OriginalL'auteur billynoah
Si vous passez à la fonction draw le
page
paramètre, la table ne bouge pas dans le défilement, mais il sera re-lire à partir de la.DataTable
source. E. g. après le sauvetage de données qui met à jour la Table de données:Note: je suis en faisant appel à un
id
colonne dans ma DataTable instanciation qui le rend facile à travailler directement avec une seule ligne. Mais je crois que lapage
paramètre donne le résultat souhaité.$table.draw('page')
fonctionne mieux que toutes les autres solutions. Réglage scrollTop directement de défilement, mais également faire l'objet datatable perdre la trace de l'endroit où il est et d'autres contrôles misreport des données telles que le début/la fin de lignes affichées etcOriginalL'auteur Charlie
La façon dont je l'ai résolu avec les tables de données 1.10 est d'utiliser preDrawCallBack pour enregistrer le ScrollTop position puis DrawCallback.
OriginalL'auteur sur
Comment à propos de ce hack? Elle n'implique pas de
scrollTop()
de la Première ouverture jquery.dataTables.js et de demander pour cette ligne, et de les supprimer:Après cela, placez le code suivant avant le draw()/clear() invocations:
Il m'a fallu un certain temps pour comprendre cela.
OriginalL'auteur PatlaDJ
Le code suivant conserve la position de défilement sur les tables de données côté serveur de rechargement.
OriginalL'auteur DragonSpirit