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 :

Forcer le navigateur à effectuer une action avant la fin d'une fonction


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2003
    Messages : 25
    Points : 19
    Points
    19
    Par défaut Forcer le navigateur à effectuer une action avant la fin d'une fonction
    Bonjour,

    Dans une fonction qui est appellé depuis un événement click j'effectue un processus javascript qui prend beaucoup de temps, c'est pourquoi j'aimerais avant l'execution de celui ci, afficher un div, et à la fin cacher le div.

    Pour cela, je me suis dit, tout simple, au début de ma fonction j'afficher mon div, j'effectue le processu et je cache mon div.

    Le problème est que javascript effectue la fonction entièrement avant de retourner au navigateur se qu'il doit faire. J'ai pu remarquer cela en mettant un alert() après l'affichage de mon div. Puisque en faisant un alert, le navigateur reprend l'action et effectu se qui a été fait avant l'alert.

    Est-ce que quelqu'un peut m'aider sur ce problème ?

    Le code suivant fonctionne :
    (avec l'alert, si on enlève l'alert ca marche plus)

    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
     
    <script language="javascript">
    	function fTest() {
    		document.getElementById("divTest").style.visibility='hidden';
    		alert("test");
    		a = 0;
    		while (a<1000000) {
    			a++;
    		}
    		document.getElementById("divTest").style.visibility='visible';
    	}
    </script>
     
    <div id="divTest" style="border:1px solid;">
    	Salut
    </div>
     
    <a href="#" onclick="fTest()">Test</a>

  2. #2
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    au momment ou ta fonction est exécutée, divTest n'existe pas encore...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2003
    Messages : 25
    Points : 19
    Points
    19
    Par défaut
    Ben si qu'il existe, puisque j'affiche ma page et j'appel ma fonction sur le clique du liens.

    Pour bien comprendre se qui se passe, le mieux est d'essayé se petit code dans une simple page html.

    D'essayer avec le alert et de réessayer sans le alert ! vous allez tout de suite voir se qui se passe.

  4. #4
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    disons que while est prioritaire, mais c'est aussi le cas de la méthode setInterval... alors...

    teste ça:

    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
    <script type="text/javascript">
     
    var a, t, d2;
    	function fTest(d) {
    		d2=document.getElementById(d);
    		a = 0;
    		t=setInterval("with(d2.style){if(a<1000){visibility='visible';a++}else{visibility='hidden';clearInterval(t)}}",1)	
    	}
     
    </script>
     
     
    <div id="divTest" style="visibility:hidden;border:1px solid;">
    Salut
    </div>
     
    <p>	
    <a href="#" onclick="fTest('divTest');return false">Test</a>
    </p>
    évidemment, ce sera beaucoup moins rapide!

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2003
    Messages : 25
    Points : 19
    Points
    19
    Par défaut
    Ok, le problème c'est que se que j'effectu un tri qui prend beaucoup de temps, donc si de mettre le div de chargement me rallonge encore le temps du tri c'est pas le top.
    Il y'a pas un moyen de redonner la priorité juste avant de faire mon tri ? un peu comme l'alert mais sans confirmation de l'utilisateur !

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/11/2012, 12h26
  2. Réponses: 1
    Dernier message: 04/06/2009, 20h56
  3. Action avant la fermeture d'une page
    Par darkheart dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/04/2009, 11h39
  4. Y-a-t'il une action avant le clic sur un bouton ?
    Par beegees dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 04/01/2009, 21h30
  5. Attendre la fin d'une action
    Par ederoeck dans le forum Access
    Réponses: 3
    Dernier message: 24/09/2005, 09h36

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