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 :

fadeIn et fadeOut autour d'un bloc de code


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut fadeIn et fadeOut autour d'un bloc de code
    Salut à tous,

    J'ai une fonction qui est une peu longue à s'exécuter. J'ai collé une div en position absolute en plein milieu de l'écran pour demander à l'utilisateur de bien vouloir patienter pendant que le chargement se fait.

    Voici ce que ça donne dans le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <!-- =========================================================================== -->
      <!--        BARRE DE CHARGEMENT         -->
      <!-- Cette barre de chargement a vocation à indiquer à l'utilisateur qu'il lui   -->
      <!-- faut patienter pour obtenir le résultat de ces actions.      -->
      <!--                     -->
      <!-- Pour utiliser cet balise, placer les instructions jQuery suivantes en début -->
      <!-- et fin des blocs d'instructions longs :          -->
      <!--  * $("div#ajaxloader").fadeIn(); //Pour le faire apparaître      -->
      <!--  * $("div#ajaxloader").fadeOut(); //Pour le faire disparaître     -->
      <!-- =========================================================================== -->
      <div id="ajaxloader">
       <br />Veuillez patienter,<br />votre demande est en cours de traitement.<p />
       <img src="img/ajaxloader.gif" />
      </div>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    div#ajaxloader {
     display: none;
     position: absolute; 
     width: 300px; 
     height: 115px; 
     vertical-align: middle;
     top: 300px; 
     left:500px; 
     text-align: center; 
     background-color: #3399ff; 
     border: thin #003333 solid; 
     font-style: italic; 
     font-color: #FF9933;
    }
    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
    21
    22
    23
    24
     
    <script type="text/javascript" language="javascript">
     function deployerCampagne(ctrl, banque, histo, arrete) {
      //Montrer le message d'attente
      $("div#ajaxloader").fadeIn();
     
    alert();
     
      //Appeler la page d'analyse des controles
      appelerPage(
       '#centre', 
       'php/resultats/form_resultat.php',
       {
           //...mes paramètres...
       }
      );
     
      //Sélectionner l'onglet analyse
      select_onglet_param('#analyse','Analyse_Controle','#elements_analyse');
     
      //Cacher le message d'attente
      $("div#ajaxloader").fadeOut();
     }
    </script>
    Mon problème, c'est que dans la théorie ça à l'air super mais en pratique - Ah, oui, un détail qui peut peser : je suis contraint de développer sous ie6 - mes fonctions alert(), select_onglet_param() et appelerPage() s'exécutent puis, je vois apparaître mon div#ajaxloader puis il disparaît quasi-instantanément.

    Comment se fait-il que ça se passe comme ça? Les instructions ne sont-elles pas censées s'exécuter dans leur ordre d'apparition? Quelqu'un a une idée?

    Merci d'avance pour vos réponses.

  2. #2
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut
    Bon, le problème semble venir d'ie6. Je viens de tester sous Firefox, ça marche très bien.

    Quelqu'un voit-il s'il y a une manipe que je pourrais faire pour y arriver malgré tout sous ie6?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 59
    Par défaut
    Une bonne pratique pour commencer, c'est de s'assurer que l'élément que tu cherches à animer soit bien présent, en utilisant:
    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
     
    $("div#ajaxloader").ready(function () {
     
        //Montrer le message d'attente
        $("div#ajaxloader").fadeIn();
     
        alert();
     
        //Appeler la page d'analyse des controles
        appelerPage('#centre', 'php/resultats/form_resultat.php', {//...mes paramètres...});
     
        //Sélectionner l'onglet analyse
        select_onglet_param('#analyse','Analyse_Controle','#elements_analyse');
     
        //Cacher le message d'attente
        $("div#ajaxloader").fadeOut();
    });

  4. #4
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut
    Merci Mohicane, j'ai appliqué la fonction ready() comme indiqué.

    Par contre, ça marche toujours aussi mal sous ie6...

    J'ai tenté d'utiliser une méthode moins "touchy" :
    - $("div#ajaxloader").Attr("style", "display:block;");
    - $("div#ajaxloader").Attr("style", "display:none;");

    Mais ça me donne une erreur dans Firebug (sous ie6, ça plante aussi) :
    Citation Envoyé par Firebug
    $("div#ajaxloader").Attr is not a function
    Pourtant, il me semble que j'utilise cette méthode correctement. Vous en dites quoi?

  5. #5
    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
    @mohicane : la méthode ready ne s'applique qu'à la page, un élément HTML ne possédant (sauf pour certains éléments remplacés) de propriété load.

    @Goupo
    Pourtant, il me semble que j'utilise cette méthode correctement.

    JavaScript est sensible à la casse et Attr != attr
    Ceci dit, tu ferais mieux d'utiliser la méthode css() : http://api.jquery.com/css/.
    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

  6. #6
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonsoir.

    Je ne sais pas si c'est le cas ici, je n'ai pas le temps de réaliser un test et je n'ai pas IE6, mais j'ai déjà eu le déplaisir de constater que la présence d'un alert() perturbe complètement la logique d'un programme.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  7. #7
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut
    Citation Envoyé par Bovino Voir le message
    @Goupo

    JavaScript est sensible à la casse et Attr != attr
    Oups!
    _____________________________________________________________
    Citation Envoyé par Bovino Voir le message
    Ceci dit, tu ferais mieux d'utiliser la méthode css() : http://api.jquery.com/css/
    Avec les méthodes css() et attr(), il ne se passe carrément plus rien. Mon traitement est effectué, mais mon ajaxloader n'apparaît pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $("div#ajaxloader").css("display", "block");
    $("div#ajaxloader").css("display", "none");
    Bien évidement, ça fonctionne à merveille sous Firefox, mais ce n'est pas ma cible.
    _____________________________________________________________
    Citation Envoyé par danielhagnoul Voir le message
    la présence d'un alert() perturbe complètement la logique d'un programme.
    C'est ce qui me semble aussi. Même dans Firefox, mon alert s'affiche avant mon ajaxloader... Ceci-dit, ce n'est pas bien grave car mon alert n'est là qu'à des fins de test.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 59
    Par défaut
    Citation Envoyé par Bovino Voir le message
    @mohicane : la méthode ready ne s'applique qu'à la page, un élément HTML ne possédant (sauf pour certains éléments remplacés) de propriété load.
    Oui. Autant pour moi. C'est un copier coller malencontreux. J'entendais par là d'attendre que la page soit charger avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $(document).ready(function() {
        (...)
    });

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

Discussions similaires

  1. Sélection complète d’un bloc de code
    Par jproto dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 25/05/2008, 21h11
  2. Réponses: 8
    Dernier message: 26/03/2008, 11h23
  3. un bloc de code executé une seule fois ?
    Par root76 dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 08/08/2006, 18h24
  4. Réponses: 6
    Dernier message: 22/09/2005, 16h59
  5. [VB6] mise en commentaire d'un bloc de code
    Par JuanDeLaPlaya dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 30/04/2003, 15h05

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