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 :

[POO] Erreur avec setInterval / Pb POO


Sujet :

JavaScript

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web en Loisir
    Inscrit en
    Janvier 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web en Loisir

    Informations forums :
    Inscription : Janvier 2006
    Messages : 129
    Points : 100
    Points
    100
    Par défaut [POO] Erreur avec setInterval / Pb POO
    bonjour,

    J'ai un script qui affiche une boite personalisé.
    J'utilise quelques fonctions de la librairie prototype.js comme setStyle ou getStyle et Class.create. Cela n'a, je pense aucun impact sur mon problème.
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
    <head>
    <title>Site de l'équipe 2</title>
    <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
    <script src="prototype.js" type="text/javascript"></script>
    <script type="text/javascript">
    Popbox = Class.create();
    Popbox.prototype = {
    	initialize: function pop(elem, code) {
    		this.elem = elem;
    		this.code = code;
    		this.crediv(this.elem, this.code);
    		document.getElementById(this.elem).style.display = "";
    	},
     
    	crediv: function(nomid, texte) {
                    wid = 200;
    		this.container = document.createElement("div");
    		this.container.setAttribute('id', nomid);
    		this.container.setStyle({position: "absolute", zIndex: "20"});
    		this.container.setStyle({width: wid+'px'});
    		this.container.setStyle({fontFamily: "Tahoma, Verdana, Sans Serif", fontWeight: "bold", color: "#444", backgroundColor: "#E88", border: "solid white", borderWidth: "7px 7px 7px 7px", textAlign: "center", padding: "20px 20px 20px 20px"});
    		this.footerdiv = document.createElement("div");
    		this.footerdiv.setAttribute('id', nomid+"1");
    		this.footerdiv.setStyle({position: "absolute", width: wid+54+'px', backgroundColor: "white", textAlign: "right"});	
    		document.body.appendChild(this.footerdiv);
    		document.body.appendChild(this.container);
     
    		l = this.container.getStyle("left");
    		t = this.container.getStyle("top");
    		this.container.innerHTML = this.code;
    		this.CloseLink = document.createElement("a");
    		this.CloseLink.setAttribute('href','#');
    		this.CloseImage = document.createElement("img");
    		this.CloseImage.setStyle({border: "none"});
    		this.CloseImage.setAttribute('src', 'fermer2.gif');
    		this.CloseLink.appendChild(this.CloseImage);
    		this.footerdiv.appendChild(this.CloseLink);
    		this.footerdiv.style.left = parseInt(l) + 'px';
    		this.footerdiv.style.top = parseInt(t) + 'px';
    		fin = parseInt(t) - this.footerdiv.getHeight();
                    this.footerdiv.style.top = fin + 1 +'px';
     
    	}
    }
    </script>
    </head>
    <body>
    <div id="menutop">
    	<a id="menu" title="essai" href="#" onclick="new Popbox('messag','Ce site est en construction.');">Essai</a>
    </div>
    </body>
    </html>
    Jusque là, pas de problème.
    Maintenant, je remplace la dernière ligne du script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.footerdiv.style.top = fin + 1 +'px';
    par ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var pe = setInterval(function() {			
    this.footerdiv.style.top =  ParseInt(this.footerdiv.style.top) - 1 + 'px';		
    if (parseInt(this.footerdiv.style.top) == fin) clearInterval(pe);
    }, 1);
    La console d'erreur de Firefox me dit :
    this.footerdiv has no properties pour la ligne situé dans le setInterval.
    J'ai cherché hier toute l'après midi sans succès.
    Une idée ??? parceque si this.footerdiv est defini quand il n'y a pas de setInterval, pourquoi il n'est pas défini avec setInterval ???

    Merci

  2. #2
    LEK
    LEK est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Points : 470
    Points
    470
    Par défaut
    Lorsque tu utilise ton setInterval, tu englobes ton this.footerdiv dans une nouvelle fonction, une nouvelle portée au sein de laquel this ne réfère plus crediv.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web en Loisir
    Inscrit en
    Janvier 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web en Loisir

    Informations forums :
    Inscription : Janvier 2006
    Messages : 129
    Points : 100
    Points
    100
    Par défaut
    Merci bien. Avant je codais tous n'importe comment. J'essaie d'écrire propre avec la POO. Pas facile.

    J'ai transmis les paramètres à l'aide d'une fonction, ça marche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    inter: function(elem, ff) {
    		new PeriodicalExecuter(function(pe) {			
    				elem.style.top = parseInt(elem.style.top) - 1 + 'px';		
    				if (parseInt(elem.style.top) == ff) pe.stop();
    			}, 0.01);
    	}
    Si j'ai bien compris, à chaque fois qu'on définit une fonction et si on veut utiliser des variables extérieures à la fonction, on est obligé de les passer en paramètres.
    Ne peut-on pas définir this.footerdiv en globale ??


    D'autre part, je profite de tes connaissances pour te demander ceci : faut-il écrire this.pe ou pe car je ne vois pas bien la différence ici.

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

Discussions similaires

  1. [POO] Erreur avec la fonction __toString()
    Par polothentik dans le forum Langage
    Réponses: 20
    Dernier message: 14/04/2008, 15h40
  2. [POO] Problème avec de la POO
    Par Alex70 dans le forum Langage
    Réponses: 10
    Dernier message: 07/06/2007, 15h10
  3. [POO] Erreur avec $this
    Par Touareg dans le forum Langage
    Réponses: 6
    Dernier message: 05/03/2007, 07h29
  4. [POO] Erreur de syntaxe avec une classe
    Par sirbaldur dans le forum Langage
    Réponses: 5
    Dernier message: 10/01/2007, 13h30
  5. [POO] Problème avec setInterval/méthodes d'écriture
    Par Lpu8er dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/07/2006, 15h37

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