begin process at 2012 05 29 21:27:52
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Javascript / DHTML / Ajax

 > 

JavaScript Orienté objet (POO)

 > 

Divers

 > 

Problème setTimeout et poo - valeur qui ne change pas (au secours...)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème setTimeout et poo - valeur qui ne change pas (au secours...)

dimanche 31 août 2008 à 14:34:26 | Problème setTimeout et poo - valeur qui ne change pas (au secours...)

0Philooz0

Bonjour,

J'ai un problème ( depuis maintenant deux jours ) avec le bout de code suivant:

///Portion de code qui pose problème.
function MaClasse(){
    this.Local=this;
    this.Mamethodeaproblemes = function(objet,j){
      var i;
      for(i=0,i<j,i++){
           setTimeout(function(){
             this.Local.Uneautremethode(objet,i);
             },i*100);
      }
    }
    this.Uneautremethode=function(objet,valeur){
      //Fait des trucs sur objet.
      objet.propriete=valeur;
    }
}

//Nouvel objet.
var unobjet=new Object;
var monobjet=new MaClasse();
monobjet.Mamethodeaproblemes(unobjet,50);
////


Je m'explique. Ce code doit appeler une fonction avec setTimeout (afin d'affecter à objet.propriete les valeurs successives (de 0 à j).
Le problème, c'est que la valeur de i envoyée sur monobjet.Uneautremethode(unobjet,i); est toujours la même...
S'il vous plaît... Aidez-moi! Je deviens ...

Merci!

Philooz
dimanche 31 août 2008 à 14:43:59 | Re : Problème setTimeout et poo - valeur qui ne change pas (au secours...)

0Philooz0

Oups... Erreur de recopiage.
J'ai for(i=0;i<j;i++){ et nonfor(i=0,i<j,i++){, de même, var Local=this;et nonthis.Local=this;.

dimanche 31 août 2008 à 17:01:26 | Re : Problème setTimeout et poo - valeur qui ne change pas (au secours...)

bizibiz17

Salut,

C'est un string qu'il faut passer en paramètre de setTimeout :

setTimeout(String fonc, Integer delai)
dimanche 31 août 2008 à 18:42:35 | Re : Problème setTimeout et poo - valeur qui ne change pas (au secours...)

0Philooz0

Pour un appel de fonction, certes. Mais depuis JS 1.1, on peut passer une fonction.
Une solution serait de passer i par valeur. Quelqu'un a une idée?
dimanche 31 août 2008 à 19:06:20 | Re : Problème setTimeout et poo - valeur qui ne change pas (au secours...)

tonytruand

salut

A tester :

      for(i=0;i<j;i++){
           setTimeout(function(){
             this.Local.Uneautremethode(objet,i);
             };i*100);

il faut mettre des " ;  " ici, il a peut être autre chose , mais ceci est à rectifier

dimanche 31 août 2008 à 19:17:45 | Re : Problème setTimeout et poo - valeur qui ne change pas (au secours...)

0Philooz0

Merci pour votre aide, tonytruand, mais cela ne fonctionne pas.

Apparemment, il semblerait que JS "transmet" la dernière valeur de i obtenue.
Dans mon code, si je mets

///Portion de code qui pose problème.
function MaClasse(){
    var Local=this;
    this.Mamethodeaproblemes = function(objet,j){
      var i;
      for(i=0,i<j,i++){
           setTimeout(function(){
             Local.Uneautremethode(objet,i);
             alert(i);
             },i*100);
      }
    }
    this.Uneautremethode=function(objet,valeur){
      //Fait des trucs sur objet.
      objet.propriete=valeur;
    }
}

//Nouvel objet.
var unobjet=new Object;
var monobjet=new MaClasse();
monobjet.Mamethodeaproblemes(unobjet,5);
////

J'ai le bon nombre d'appels (5), j'ai le bon timing, mais j'ai 5 fois la valeur 5...
Je me torture avec des eval() et autres, mais impossible de récupérer cette fichue valeur de i!

Je commence à désespérer...
dimanche 31 août 2008 à 19:28:53 | Re : Problème setTimeout et poo - valeur qui ne change pas (au secours...)

bizibiz17

Réponse acceptée !
A priori la valeur de i doit être ici passée par référence = un pointeur, du coup lorsque tu essaies de lire sa valeur, tu lis la valeur que i possède à cet instant donc a priori la dernière car le code se déroulera plus vite que ton timeOut.
La solution serait donc comme tu disais un passage par valeur mais sur ce point je ne connais pas la solution, je ne sais même pas si c'est possible...
lundi 1 septembre 2008 à 06:06:39 | Re : Problème setTimeout et poo - valeur qui ne change pas (au secours...)

bultez

Membre Club
Réponse acceptée !

bonjour,

problème souvent évoqué
mais comme on n'a pas toutes les billes pour appliqué à ton code,
un ch'tiot exemple sur des éléments html :
tu comprendras le principe

<html>
    <body>
        <form name="frm">
            <input type="text" name="t" value="un" />
            <input type="text" name="t" value="deux" />
            <input type="text" name="t" value="trois" />
        </form>
        <script type="text/javascript">
            for( var n=0; n<document.frm.t.length; n++)
            {    var Obj = document.frm.t[n];

                     méthode 1

                Obj.numChp = n;
                Obj.onmouseover = function ()  
                    { alert ( this.numChp ); }

                     méthode 2

                Obj.onclick = function(index)
                    {   return function()
                            { alert(index+1);};
                    }   (n);               

            }
        </script>
    </body>
</html>

je me garderais bien de te dire quelle méthode est la meilleure !

Cordialement   Bul  [mon Site] [M'écrire]
lundi 1 septembre 2008 à 07:43:05 | Re : Problème setTimeout et poo - valeur qui ne change pas (au secours...)

bultez

Membre Club
ch'tiote erreur : j'ai mis onclick sur l'un et onmouseover sur l'autre,
"bien entendu" c'est pour le même evênement.
CordialementBul[mon Site][M'écrire]
lundi 1 septembre 2008 à 08:50:25 | Re : Problème setTimeout et poo - valeur qui ne change pas (au secours...)

0Philooz0

Merci, je vais essayer de me débrouiller avec ça.


Cette discussion est classée dans : problème, function, objet, valeur, settimeout


Répondre à ce message

Sujets en rapport avec ce message

setTimeout [ par DarkCid ] Bonjour,j'essaye de créer mon objet compte à rebours pour mon site. pour l'instant, j'ai ceci :function Timer(){   var time         = '';        var c problème avec domready (je pense) [ par jpegb4 ] Bonjour à tous !voilà je débute doucement en Ajax j'utilise mootools pour m'en sortir un peu mieux.J'ai intégré aussi le script multibox de phatfusion Problème de SetTimeOut() [ par Jpeg69 ] Bonjour tout le monde !J'ai un léger soucis avec le SetTimeOut().Je l'utilise naturellement pour gérer un compte à rebours.Celui-ci marche parfaitemen Problème de Refresh [ par nabmoah ] Salutj'ai trouvé ce bout de code sur ce forum et j'ai essayé de le faire marché mais sans succès.le problème c'est que la page m'affiche toutes les 2 Problème de setTimeout OU de modification de variable ??? [ par pcmanprogrammeur ] Bonjour,J'ai un problème avec mon code Javascript. Je vous ai simplifié le principe pour plus de compréhension :var autorisation = true; function a( Problême de setTimeout dans un objet [ par kurt67 ] Salut à tous! Mon problême est assez simple et ça fait deux jours que je cherche une solution et je n'en ai pas trouvé. J'ai un objet avec des méthode Selection d'une valeur via une fenetre popup [ par evenkil ] Bonjour ,J"ai un petit problème avec une fonction javascript. Voici mon problème : j"ai un formulaire avec un nommé "photo1" dans lequel l?utilisat Problème urgent et basique [ par Thireus ] Bonjour, J'ai un petit problème javascript, le voici : J'aimerais récupérer la valeur bgcolor d'une balise tr en l'affichant dans une cellule : Function et valeur [ par fidjay ] Salut tout le monde alors voila, j'ai un petit soucis je doit pas mis prendre bien, j' arrive pas a faire passer une valeur dans ma fonction, j'ai che Problème de passage de variable dans un formulaire [ par spaceyogourt ] Salut tout le monde,j'ai un petit souci pour transmettre une variable sur une autre page.d'un côté j'ai un script qui affiche une zone si le contenu


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,278 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales