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 :

relancer une fonction en cours d'execution


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 45
    Points : 48
    Points
    48
    Par défaut relancer une fonction en cours d'execution
    Bonjour,

    Sur un tableau j'applique un filtre. la valeur du filtre est déterminée par un champ input et se lance par onkeyup. A chaque fois que l'utilisateur rajoute une lettre dans l'input le tableau est refiltré.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
         function filtre(valeur,colonne)
    {  
            for (i=0;i<nb_lots;i++)
        {
        if (!$("#matable tbody>tr:eq("+i+")>td:eq("+colonne+")").text().toLowerCase().match(valeur.toLowerCase())) 
              {$("#matable tbody>tr:eq("+i+")").hide();}
         else {$("#matable tbody>tr:eq("+i+")").show();}
            }
    cette fonction est activée par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="text"class="inputbleu" size="6" name="xxx" onkeyup=javascript:filtre(this.value,22)>

    mon pb est que si l'utilisateur rentre plusieurs lettres à la suite la fonction filtre est en train de tourner et comme le tableau est un peu long il faut attendre que le filtre soit terminé pour que la lettre suivante soit acceptée et que le filtre se remette en route.

    je voudrais donc en cas de 2 frappes de touche rapprochées interompre ma fonction et la relancer immédiatement.

    merci de vos idées.

  2. #2
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    NON !
    la fonction ne tourne pas déjà quant elle est relancée.

    sur tous les systèmes graphique (et le HTML n'y déroge pas) les événements sont mis en file d'attente.

    la méthode qui traite un événement doit être terminée pour que l'événement suivant dans la file soit pris en charge. et il n'y a qu'une seule est unique file pour tout le système.

    Pour couper court au protestations sur le parallélisme
    La méthode lancé par le gestionnaire d'événement peut lancer une exécution en // (thread par exemple)
    le process ainsi lancé peut continuer indépendamment de la méthode elle-même mais l'événement suivant sera traité par le gestionnaire que lorsque elle retournera sa valeur.

    dans HTML/JS pas de thread le traitement doit donc être terminé pour que l'événement suivant soit pris en charge.

    dans ton cas ce ne sera même pas le keyUp suivant car avant ça le gestionnaire va traiter au moins le keyDown

    il n'y a donc aucune tempo à mettre en oeuvre. la fonction doit se terminer pour que le système traite la touche suivante.

    A+JYT

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 45
    Points : 48
    Points
    48
    Par défaut
    ok merci je m'en doutais un peu.

    On doit pouvoir quand même mettre une petite tempo avant le lancement de la fonction et ca devrait regler le pb.

  4. #4
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    réponse : non

    mais tu peut t'y prendre différemment
    tu fait une fonction filter
    tu définit une variable indiquant si une demande de filtre est active que tu position à false ua départ

    sur l'ajout d'une touche si la variable est à false tu lance un timer et pas ta variable à true sinon tu rends la main

    lorsque le timer arrive à expiration tu mets la variable à false appelle ta fonction filter

    ainsi tu filtreras toutes les touches entrées durant le temps du timer.
    si une touche est enfoncée durant le filtre il faut attendre la fin du filtre


    l’inconvénient est que si tu fais ça lorsque on appuis sur une seule touche il te faut attendre le temps du timer plus le temps du filtre.

    avant d'envisager un truc pareil je révérais mas fonction filtre.
    par exemple tu récupère à l'avance toutes les valeurs dans un tableau
    ainsi le filtre n'a pas à refaire une requête dans le DOM à chaque appel du filtre de même tu peux à l'avance garder un référence sur chaque objet du DOM correspondant au tr que tu veux afficher ou masquer

    ainsi ton filtre n'a plus qu'a vérifier la présence d'une valeur dans un tableau (ce qui beaucoup plus rapide que de parcourir le DOM)
    puis à afficher ou masquer une référence sans avoir à la chercher.

    JQuery et très trompeur sur sa syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $('#matable tbody>tr:eq('+i+')'
    est un appel de fonction qui sera exécuté à chaque passage de la boucle et à chaque appel du filtre.

    ce n'est pas un référence à un objet ou une liste d'objet
    A+JYT

    Forme toi avec les Cours et tutoriels pour apprendre JavaScript

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. passer des data a une fonction en cours d'execution
    Par benooo dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 18/06/2011, 11h17
  2. Réponses: 1
    Dernier message: 19/01/2010, 14h48
  3. Stopper une fonction en cours d'execution
    Par eponyme dans le forum C
    Réponses: 14
    Dernier message: 10/01/2008, 09h43
  4. Réponses: 4
    Dernier message: 07/11/2006, 11h28
  5. Compacter une appli en cours d'execution.
    Par valentin4949 dans le forum Access
    Réponses: 4
    Dernier message: 26/11/2004, 10h00

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