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 :

Stopper un $.each


Sujet :

jQuery

  1. #1
    jux
    jux est déconnecté
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2002
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 36
    Par défaut Stopper un $.each
    Bonjour je développe une interface qui nécessite de récupérer des données pour générer un fichier excel.
    L'utilisateur doit pouvoir stopper à tout moment la récupération des données.

    Cette partie comporte un bouton Générer XLS, un bouton STOP et une barre de progression.
    Pour éviter les timeout j'utilise un $.each qui appelle un webservice et je souhaite que le bouton STOP arrête le $.each.

    Mon code simplifié :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <button class="btn btn-success" style="float:left; margin-right:1px" onclick="getxls()">Générer le fichier XLS</button>
    <button class="btn btn-danger" id="button_stop" style="float:left; margin-right:3px;" onclick="stop()" >Stop</button>
    <div class="progress progress-striped" style="display:none" id="progress">
    	<div class="bar" id="bar"></div>
    </div>

    Code JS :
    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
    var stop_clicked=false;
    function getxls(){
      $( "#progress" ).show();
      $.each(array, function( index, value) {
    	if(stop_clicked){
    		return false;
    	}
    	data[]=appelWS(value);
    	$( "#bar" ).width(getvalueprogressbar(nb_total, index)+'%');
      });
      xls_generate(data);
    }
    function stop(){
        alert('stop_clicked');
        stop_clicked= true;
    }
    Le problème est que pendant que le each s'exécute, le bouton stop ne réagit pas (les autres boutons aussi), sauf quand le each est terminé
    J'ai essayé plusieurs trucs mais j'ai toujours le même problème de blocage de l'interface ...

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Une boucle est traitée de façon séquentielle. Donc tant qu'elle s'exécute, elle ne rend pas la main au reste du script.
    Bref, tu ne peux pas stopper la boucle à l'aide d'une action utilisateur.

    Pour éviter les timeout
    C'est dommage : c'est le seul moyen pour rendre la main pendant l'exécution du code !


    Tu ne confondrais pas avec la syntaxe PHP là ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    jux
    jux est déconnecté
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2002
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 36
    Par défaut
    oui pardon pour le
    data[]=appelWS(value);
    c'est différent dans le code d'origine

    Sinon j'ai trouvé une piste pour mon problème :
    http://jsfiddle.net/zP3gT/

    Je teste demain. Merci.

Discussions similaires

  1. [NVidia] Démarrer ou stopper sortie Tv
    Par nico-21 dans le forum DirectX
    Réponses: 2
    Dernier message: 31/05/2004, 11h59
  2. apply-templates et for-each
    Par d'Oursse dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 14/05/2004, 08h38
  3. utilisation de for each
    Par billoum dans le forum ASP
    Réponses: 5
    Dernier message: 19/03/2004, 15h30
  4. Stopper la répétition du clavier
    Par Chris89 dans le forum Assembleur
    Réponses: 6
    Dernier message: 17/10/2003, 20h53
  5. [VB6] For Each ... In ...
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/02/2003, 12h56

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