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

Bibliothèques & Frameworks Discussion :

Appel de méthode dans setTimeOut() impossible sous IE 7 [Prototype]


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre du Club Avatar de charlene44
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 87
    Points : 67
    Points
    67
    Par défaut Appel de méthode dans setTimeOut() impossible sous IE 7
    Bonjour Bonjour,

    depuis quelques jours je bloque sur un problème bien prise de tête sur IE 7 (oui je sais, je suis obligé pour le travail d'avoir un produit compatible...).

    Bref, dans un callback j'ai déclaré un setTimeOut() pour me faire un petit fade et je dois appeler quelques méthodes dans ce timeout, je ne peux pas faire autrement c'est pas faute d'avoir essayé...

    Plus précisément j'ai une grille avec des div et je peux les déplacer et lors de chaque déplacement je dois actualiser les menus des autres div et re-construire les menus des divs déplacés car ceux-ci ont été supprimé lors du déplacement.

    petite précision : j'utilise Prototype, mon code marche parfaitement sous FF, chrome, safari et opera mais pas sous IE j'ai un undefined qui vient du this je pense.

    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
    25
     
    var ResultEdition = Class.create({
      [...]
      bibip : function() {
        alert('bibip');
      },
      /**
      * Callback pour le deplacement d'un contenu
      * Permet de verifier si le contenu peut se deplacer a la position voulue
      */
      moveContentCallback : function() {
        var thisObj = this;
     
        setTimeout(function(thisObj) {
          alert("je rentre dans le timeOut");
          $(strNewPosition).appear({ duration: 1 });
          $(strPosition).appear({ duration: 1 });
     
          // On met a jour le tableau listant les contenus par position
          alert('on se lance');
          thisObj.bibip();
          [...]
        },1000,this);
      },
    });
    résultat de ce petit bout de code : tous mes alert se font sauf le seul qui m'interesse : bibip

  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 : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setTimeout(function(thisObj) {...},1000,this);
    IE n'accepte pas le 3e paramètre.
    Ceci dit, si c'est pour passer this, c'est un peu inutile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var thisObject = this;
    setTimeout(function(thisObj) {...},1000);
    suffit amplement, du moins si tu sais exactement à quoi this fait référence dans la fonction anonyme

  3. #3
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    Par défaut
    Bonsoir,

    Il est également possible d'utiliser la méthode delay que prototype ajoute à l'object Function :
    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
    25
    26
     
    var ResultEdition = Class.create({
      [...]
      bibip : function() {
        alert('bibip');
      },
      /**
      * Callback pour le deplacement d'un contenu
      * Permet de verifier si le contenu peut se deplacer a la position voulue
      */
      moveContentCallback : function() {
        var thisObj = this;
     
        var maFonction = function(thisObj) {
          alert("je rentre dans le timeOut");
          $(strNewPosition).appear({ duration: 1 });
          $(strPosition).appear({ duration: 1 });
     
          // On met a jour le tableau listant les contenus par position
          alert('on se lance');
          thisObj.bibip();
          [...]
        };
        maFonction.delay(1, this);
      },
    });
    Mais tant que tu y est tu peux binder cette fonction à ton objet :
    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
     
    var ResultEdition = Class.create({
      [...]
      moveContentCallback : function() {
     
        var maFonction = function() {
          alert("je rentre dans le timeOut");
          $(strNewPosition).appear({ duration: 1 });
          $(strPosition).appear({ duration: 1 });
     
          // On met a jour le tableau listant les contenus par position
          alert('on se lance');
          this.bibip();
          [...]
        };
        maFonction.bind(this).delay(1);
      },
    });

  4. #4
    Membre du Club Avatar de charlene44
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 87
    Points : 67
    Points
    67
    Par défaut
    merci beaucoup à vous deux, problème résolu

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

Discussions similaires

  1. [PHP 5.3] [POO] Appel de méthode dans une autre méthode de la même classe
    Par LunaSev dans le forum Langage
    Réponses: 10
    Dernier message: 18/05/2010, 15h24
  2. appeler une méthode dans une autre méthode
    Par yacin87 dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 11/04/2010, 13h29
  3. MVVM : Appeler une méthode dans Window à partir d'une vue
    Par tom741 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 09/02/2010, 12h24
  4. [Debutant] Appels de méthodes dans une JSP
    Par michaeljeru dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 05/06/2008, 11h56
  5. appeller une méthode dans le nom est dans un String
    Par fxjtarga dans le forum Langage
    Réponses: 2
    Dernier message: 24/02/2006, 16h06

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