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

jQuery Discussion :

Rafraîchissement régulier d'un élément


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut Rafraîchissement régulier d'un élément
    Bonjour,

    j'ai 2 boutons : 1 bouton "Action" et 1 bouton "Compteur" affichant un chiffre.

    Je voudrai qu'en cliquant sur le bouton Action le bouton Compteur affiche toute les x secondes le chiffre i+1.

    https://jsfiddle.net/wcneesyw/8/ ( ce code n'affiche que la valeur finale)

    Auriez-vous une solution simple à me proposer svp? Je vous remercie d'avance,

    Cordialement

    Arsène

  2. #2
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 495
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 495
    Par défaut
    il faut que tu changes ton algo.

    en gros, il va effectivement boucler 10 fois, mais il le fera en une micro-seconde... et pendant ce temps, il va lancer 10 setTimeout() qui s'executeront tous a la suite en une micro-seconde mais dans 300ms
    (je ne sais pas si mon exeplication est plus clair )

    et si tu veux effectivement faire un appel recursif (cf. ton commentaire), il faut que tu revois la definition du mot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $('#Action').on('click',function() {
    	increment(1);
    });
     
    function increment(i) {
    	$('#buttonV').attr('value', i);
    	if(i < 10) {
      	setTimeout(function() {
      		increment((i+1));
        }, 300);
    	}
    }
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 197
    Par défaut
    Bonjour,

    La méthode setTimeout sert surtout à retarder une action, c'est à dire effectuer une action après un délai ou une pause.
    Pour ce que tu veux faire, à mon avis, ce sera plus simple d'utiliser la méthode setInterval, qui exécute une action à chaque intervalle du temps spécifié en paramètre (ici 300 ms):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $('#Action').on	('click', function () {var i = 1, intervalle = setInterval (
                                        function ()
                                        {
                                          $('#buttonV').attr('value', i++);
                                          if (i > 10)
                                          {
                                          	clearInterval(intervalle);
                                          }}, 300);});

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Merci pour vos solutions qui m'aident beaucoup.
    Dans mon application, je voudrais afficher une fenêtre modale durant le temps de traitement.
    Savez vous comment faire pour que les fonctions s'exécutent les unes après les autres?

    https://jsfiddle.net/wcneesyw/11/

    Je voudrai que "Arrivée" ne s'affiche qu'après que le bouton V indique le chiffre 10.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    MERCI d'afficher ton code AUSSI dans le contenu de tes messages.


    Ainsi, même si ton fiddle disparait, on aura toujours ce code.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Ok j'y avais pas pensé, je le rajoute :

    Code HTML :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <button id="Action">Go</button>
    <br><br>
    <input id="buttonV" type="button" value="1" />
    <br><br>
    <input id="buttonV2" type="button" value="Départ" />

    CODE JAVASCRIPT :

    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
    $('#Action').on('click',function() {
    $('#buttonV2').hide();
    	increment(1);
     $('#buttonV2').val("Arrivée");  
     $('#buttonV2').show(); 
    });
     
    function increment(i) {
    	$('#buttonV').attr('value', i);
    	if(i < 10) {
      	setTimeout(function() {
      		increment((i+1));
        }, 300);
    	}
    }

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/03/2015, 18h31
  2. [Algo] Trouver un arrangement ou une combinaison d'éléments
    Par Morvan Mikael dans le forum Algorithmes et structures de données
    Réponses: 16
    Dernier message: 20/04/2013, 11h46
  3. Réponses: 6
    Dernier message: 22/05/2009, 21h04
  4. Supprimer un élément d'un tableau
    Par CaptainChoc dans le forum Langage
    Réponses: 15
    Dernier message: 23/12/2002, 23h14
  5. Réponses: 3
    Dernier message: 16/12/2002, 16h12

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