IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Filtrage table dans iframe via JS, le scroll ne remonte pas => on croit que la table est vide


Sujet :

JavaScript

  1. #1
    Membre éclairé Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Par défaut Filtrage table dans iframe via JS, le scroll ne remonte pas => on croit que la table est vide
    Bonjour à tous,

    pour optimiser la recherche interactive dans une liste de plus de 3000 enregistrements, j'utilise un petit script js qui permet de filtrer une table html en rendant invisible les lignes ne contenant pas un mot clé de la recherche

    de cette façon, je ne charge la page qu'une seule fois au début, c'est assez rapide (quelques secondes) et ensuite l'utilisateur peut chercher à l'intérieur de la table sans refaire de requête vers le serveur

    Le code js est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    function filtrerLISTING(){
     
    	var lignes = document.getElementById('table_listing').getElementsByTagName("tr");
     
    	for (var i=1; i < lignes.length; i++)
    	{
    		display = '';
     
    		var terms = keywords.toLowerCase().split(" ");
     
    		for (var j = 0; j < terms.length; j++) {
     
    			if (lignes[i].innerHTML.replace(/<[^>]+>/g, "").toLowerCase()
    			   .indexOf(terms[j]) < 0) {
    		                    display = 'none';
     
    			}
     
     
    		}
     
     
    		lignes[i].style.display = display;
     
    	}
     
    }
    Je dois préciser que la table listing se trouve dans une iframe, et que le form des critères de recherche se trouve dans la page parente. Le listing scroll donc dans la iframe. A noter que pour avoir un scroll parfaitement compatible avec les différents navigateurs, je passe par une bibliothèque iscroll.js (https://github.com/cubiq/iscroll)

    Ca marche extrêmement bien, le seul problème c'est que le filtrage rend invisible les lignes non pertinentes vis à vis des critères mais ne remonte pas le tableau vers les premières lignes restées visibles.

    Donc potentiellement, l'utilisateur se retrouve avec une iframe blanche, et croit qu'il n'y a aucun résultat. En fait il suffit de scroller vers le haut pour voir les lignes restées visibles car l'ascenceur est resté à sa place au moment du filtrage en milieu de table.

    Ce que je voudrais c'est mettre en place une ruse pour que le listing remonte en tête de liste à chaque fois que le filtrage est exécuté...

    J'aurai du mal à vous faire une démo en ligne, quoique, mais je pense que vous aurez compris ?

    Merci à quiconque m'apportera une piste pour régler ce petit "bug".

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Bonjour,

    En pratique, si tu caches des éléments avec display:none, la hauteur du conteneur devrait diminuer et donc la barre de défilement automatiquement s'adapter en taille. Ici le problème c'est iScroll : c'est de l'émulation de scroll, donc ça vient bricoler en permanence avec la hauteur du conteneur.

    On peut sûrement régler ce souci en appelant une méthode spécifique à iScroll, qui lui dise de recalculer tout ça. Mais je me demande en premier lieu pourquoi tu as besoin de cette lib. On a pas besoin de ce genre de trucs pour rendre "compatible le scroll avec les différents navigateurs", les barres de défilement sont régies par du CSS basique et si ça ne fonctionne pas de base sur certains navigateurs, ça peut juste se régler en CSS.

  3. #3
    Membre éclairé Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Par défaut
    Sur les navigateurs mobiles je n'ai pas eu le choix, enfin surtout safari

    J'ai testé plusieurs solutions css pures avant de prendre cette lib et je l'utilise partout dans mon appli web donc je n'envisage pas trop de tout changer

    Par contre, voir si une méthode permettrait de recalculer la hauteur de scroll et de l'ascenceur ça ça pourrait être la solution.

    Parce que faire un scrollTo(0, 0) ne fonctionne pas, déjà essayé

  4. #4
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Je reste circonspect sur l'usage de cette lib.

    Mais la méthode refresh devrait régler ce problème : http://iscrolljs.com/#refresh

  5. #5
    Membre éclairé Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Par défaut
    oui c'est bien ça :

    setTimeout(function () { myScroll.refresh(); }, 0);

    exactement le comportement recherché

    merci mille fois

Discussions similaires

  1. Erreur lors d'un INSERT sur une table dans Firebird via dbExpress
    Par matou7 dans le forum Bases de données
    Réponses: 4
    Dernier message: 03/04/2012, 16h40
  2. [AC-2003] ne conserver que les tables dans une base externe
    Par AndréPe dans le forum VBA Access
    Réponses: 10
    Dernier message: 08/06/2010, 08h46
  3. Est il possible de modifier la position d'une scroll dans iframe
    Par Mho37 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/11/2008, 11h05
  4. la tag table dans la page de mon iframe qui ne s'affiche pas sous IE
    Par witch dans le forum Balisage (X)HTML et validation W3C
    Réponses: 0
    Dernier message: 20/01/2008, 15h44
  5. Réponses: 9
    Dernier message: 14/02/2007, 17h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo