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 :

Comment savoir si un process a déjà été lancé?


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Avatar de strat0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2003
    Messages : 288
    Points : 598
    Points
    598
    Par défaut Comment savoir si un process a déjà été lancé?
    Bonjour,

    Voilà j'ai un petit problème. Lorsque l'on clique sur un bouton de ma page, une certaine ligne (détectée) clignote dans un tableau avec la méthode setInterval. C'est à dire que j'alterne entre la couleur originale de la ligne, et une couleur spéciale surlignement (l'alternance des deux créant le clignotement).

    Problème : si on clique sur un forcené sur le bouton, ça lance autant de fois la fonction javascript correspondante qui va lancer le clignotement. Sauf qu'à un moment donné, fatalement, cette fonction va relever que la couleur originale est... la couleur de surlignement qui est appliquée par un précédent lancement de la fonction. Tant et si bien qu'à la fin du clignotement, lorsque la couleur originale est sensée être rétablie, c'est la couleur de surlignement qui reste visible.

    Donc j'aurais besoin de, disons détecter si le setInterval n'a pas déjà été lancé lors d'un précédent process, auquel cas je ne le relancerai pas.

    J'ai essayé ça, "clignotement" étant la variable contenant le setInterval, et je l'ai placé avant la déclaration de cette variable justement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (typeof(window[clignotement]) != "undefined")
    {
       clearInterval(clignotement);
       ligneTableau.className = originalClass;
    }
    Mais ça ne donne rien. Pour lui "clignotement" est toujours undefined puisque je la déclare plus bas (même si c'est déjà en train de clignoter pour cause d'un précédent click sur le bouton).

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    Citation Envoyé par strat0
    Donc j'aurais besoin de, disons détecter si le setInterval n'a pas déjà été lancé lors d'un précédent process, auquel cas je ne le relancerai pas.
    le test est donc plutôt à faire sur l'interval que sur la fonction.
    Il faut donc pouvoir identifier l'interval lui-même.
    Ne connaissant pas le reste de ton code, un petit exemple (ton test sur "undefined" pour la fonction se transformerait en test de la valeur null sur le handle de l'interval) :
    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 type="text/javascript">
    <!--
    var actif = window.setInterval("Couleur()",1000);
    var i = 0, couleur = 1;
    function Couleur() {
      if(couleur==1)
      { document.bgColor="yellow"; couleur=2; }
      else
      { document.bgColor="aqua"; couleur=1; }
      i = i + 1;
      if(i >= 10) {
       window.clearInterval(actif);
       actif=null;}
    }
    setTimeout("alert(actif + '/' + typeof actif)", 5000);
    setTimeout("alert(actif + '/' + typeof actif)", 15000);
    //-->
    </script>
    EDIT : attention script récupéré : en dehors de la gestion du setInterval, certaines syntaxes (style ...) sont obsolètes

    A+

  3. #3
    Membre confirmé
    Avatar de strat0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2003
    Messages : 288
    Points : 598
    Points
    598
    Par défaut
    J'avoue n'avoir pas très bien compris ton exemple, mais j'ai trouvé comment rusé, et ça donne ç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
    20
    var ligneTableau = loop[i].parentNode.parentNode;
    var originalClass = ligneTableau.className;
    ligneTableau.scrollIntoView();
    var count = 0;
    
    if (ligneTableau.className != 'SurligneStyle')
    {
        var clignotement = setInterval(function(){
        if (count >= 8)
        {
            clearInterval(clignotement);
            ligneTableau.className = originalClass;
        }
        else
        {
            ligneTableau.className = (ligneTableau.className == originalClass) ? 'SurligneStyle' : originalClass;
            count++;
        }
    }, 250);
    }

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par strat0
    J'avoue n'avoir pas très bien compris ton exemple


    Désolé, je vois pas comment faire plus simple ...
    C'est le même principe que les handle de fenêtres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LaPop = window.open(...).
    ...
    LaPop.close();
    Mais l'essentiel est que tu ais trouvé une solution

    A+

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

Discussions similaires

  1. Comment savoir si un process est en cours d'execution
    Par luroten dans le forum Windows
    Réponses: 2
    Dernier message: 08/10/2014, 15h11
  2. Réponses: 12
    Dernier message: 08/07/2008, 13h34
  3. Réponses: 5
    Dernier message: 15/06/2007, 14h56
  4. [Process] Comment savoir quelle application est ouverte ?
    Par samus535 dans le forum Framework .NET
    Réponses: 1
    Dernier message: 25/08/2006, 15h01
  5. [Process] comment savoir si exec est termine
    Par v1nc3kr0 dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 29/06/2005, 16h54

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