|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre à l'essai
![]() Inscription : septembre 2010 Messages : 34 ![]() |
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 :
Code :
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. |
||||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 1 421 ![]() |
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 |
|
|
00
|
|
|
#3 |
|
Membre à l'essai
![]() Inscription : septembre 2010 Messages : 34 ![]() |
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. |
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 1 421 ![]() |
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 syntaxeest 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 |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com