Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
645 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Passer les arguments d'un Array dans un setTimeout.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Passer les arguments d'un Array dans un setTimeout.

n°1635199
darkkrab
Posté le 01-11-2007 à 19:29:35  profilanswer
 

Comment est-t-il possible de transmettre la valeur de l'argument de l'Array à un setTimeout chaque fois que la boucle s'effectue?
Présentement "fst[i]" et "snd[i]" renvoient "undefined".
 

Code :
  1. <input type="button" value="Test" onclick="fst=new Array(130,240,182,91);snd=new Array(108,154,111,170);acts(this)">
  2. <script language="JavaScript" type="text/javascript">
  3. <!--
  4. function acts(xw){
  5. var q=0;
  6. for (var i=0; i<fst.length; i++){
  7. setTimeout(function(){Gfight_1(xw,fst[i])},q);q+=1100;
  8. setTimeout(function(){Dfight_1(xw,snd[i])},q);q+=1100;
  9.      }
  10. }
  11. // -->
  12. </script>

mood
Publicité
Posté le 01-11-2007 à 19:29:35  profilanswer
 

n°1635202
masklinn
í dag viðrar vel til loftárása
Posté le 01-11-2007 à 19:33:47  profilanswer
 

Code :
  1. setTimeout(Gfight_1, q, xw, fst[i])


[:petrus dei]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1635302
mIRROR
Chevreuillobolchévik
Posté le 02-11-2007 à 00:23:34  profilanswer
 

masklinn a écrit :

Code :
  1. setTimeout(Gfight_1, q, xw, fst[i])


[:petrus dei]

 

sur firefox ouais :/
c ets pour ca que j avais eu besoin de ton aide :o
ie accepte que deux parametres: une fonction et la duree du timeout
en sachant que la fonction doit etre une string qui ne prend qu un argument au maximum
donc obligé de passer par une lambda avec tout le bordel de scope qui en decoule :D


Message édité par mIRROR le 02-11-2007 à 00:24:36

---------------
« The enemy is the gramophone mind, whether or not one agrees with the record that is being played at the moment. » — George Orwell
n°1635304
darkkrab
Posté le 02-11-2007 à 00:31:27  profilanswer
 

Donc je vais être obliger de distribuer mes arguments à des nom de variables fixes avec une boucle?

n°1635306
mIRROR
Chevreuillobolchévik
Posté le 02-11-2007 à 00:33:57  profilanswer
 

darkkrab a écrit :

Donc je vais être obliger de distribuer mes arguments à des nom de variables fixes avec une boucle?


 
pika ?


---------------
« The enemy is the gramophone mind, whether or not one agrees with the record that is being played at the moment. » — George Orwell
n°1635309
gatsu35
Blablaté par Harko
Posté le 02-11-2007 à 00:38:49  profilanswer
 

Code :
  1. <script language="JavaScript" type="text/javascript">
  2. function acts(xw){
  3. var q=0;
  4. for (var i=0; i<fst.length; i++){
  5. setTimeout((function() {  return function(){Gfight_1(xw,fst[i])} }() ),q);q+=1100;
  6. setTimeout((function() { return  function(){Dfight_1(xw,snd[i])}  }() ),q);q+=1100;
  7.      }
  8. }
  9. </script>



Message édité par gatsu35 le 02-11-2007 à 00:39:08
n°1635311
darkkrab
Posté le 02-11-2007 à 00:45:28  profilanswer
 

Malheureusement, on obtient le même résultat que le script initial.

n°1635314
mIRROR
Chevreuillobolchévik
Posté le 02-11-2007 à 00:48:47  profilanswer
 

si tu fais alert(fst) ca donne quoi [:petrus dei]


---------------
« The enemy is the gramophone mind, whether or not one agrees with the record that is being played at the moment. » — George Orwell
n°1635321
darkkrab
Posté le 02-11-2007 à 01:14:21  profilanswer
 

http://img456.imageshack.us/img456/1489/nouveauimagebitmapmf1.png

n°1635328
mIRROR
Chevreuillobolchévik
Posté le 02-11-2007 à 01:25:52  profilanswer
 

Code :
  1. <script language="JavaScript" type="text/javascript">
  2. function acts(xw){
  3. var q=0;
  4. for (var i=0; i<fst.length; i++){
  5. setTimeout((function() {  return function(x){Gfight_1(xw,x)} }(fst[i]) ),q);q+=1100;
  6. setTimeout((function() { return  function(y){Dfight_1(xw,y)}  }(snd[i]) ),q);q+=1100;
  7.      }
  8. }
  9. </script>


 
si j ai bien compris ca devrait marcher comme ca mais je suis pas sur  :whistle:  


---------------
« The enemy is the gramophone mind, whether or not one agrees with the record that is being played at the moment. » — George Orwell
mood
Publicité
Posté le 02-11-2007 à 01:25:52  profilanswer
 

n°1635359
masklinn
í dag viðrar vel til loftárása
Posté le 02-11-2007 à 08:08:10  profilanswer
 

mIRROR a écrit :

Code :
  1. <script language="JavaScript" type="text/javascript">
  2. function acts(xw){
  3. var q=0;
  4. for (var i=0; i<fst.length; i++){
  5. setTimeout((function() {  return function(x){Gfight_1(xw,x)} }(fst[i]) ),q);q+=1100;
  6. setTimeout((function() { return  function(y){Dfight_1(xw,y)}  }(snd[i]) ),q);q+=1100;
  7.      }
  8. }
  9. </script>


 
si j ai bien compris ca devrait marcher comme ca mais je suis pas sur  :whistle:  


yep :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1635400
mIRROR
Chevreuillobolchévik
Posté le 02-11-2007 à 10:36:28  profilanswer
 

[:dockbchris]


---------------
« The enemy is the gramophone mind, whether or not one agrees with the record that is being played at the moment. » — George Orwell
n°1635413
gatsu35
Blablaté par Harko
Posté le 02-11-2007 à 11:12:14  profilanswer
 

mirror you are the best, et sinon j'arrive à 11h30 ce matin mon biquet barbu

n°1635416
mIRROR
Chevreuillobolchévik
Posté le 02-11-2007 à 11:20:45  profilanswer
 

\o/


---------------
« The enemy is the gramophone mind, whether or not one agrees with the record that is being played at the moment. » — George Orwell
n°1636495
darkkrab
Posté le 04-11-2007 à 18:55:47  profilanswer
 

Ça ne fonctionne pas encore, désolé.
 
Résultat voulu : 130,108,240,154,182,111,91,170
IE : undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined
FF : Chiffres aléatoires
NN : Chiffres aléatoires
 
Pour tester :

Code :
  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. <input type="button" value="Fight" onclick="fst=new Array(130,240,182,91);snd=new Array(108,154,111,170);acts(this)" />
  6. <div id="test"></div>
  7. <script>
  8. function acts(xw){
  9. var q=0;
  10. for (var i=0; i<fst.length; i++){
  11. setTimeout((function() {return function(x){Gfight_1(xw,x)} }(fst[i]) ),q);q+=1100;
  12. setTimeout((function() {return function(y){Dfight_1(xw,y)} }(snd[i]) ),q);q+=1100;
  13. }
  14. }
  15. function Gfight_1(xw,frpp){
  16. document.getElementById("test" ).style.color="red";
  17. document.getElementById("test" ).innerHTML=xw+frpp;
  18. }
  19. function Dfight_1(xw,frpp){
  20. document.getElementById("test" ).style.color="blue";
  21. document.getElementById("test" ).innerHTML=xw+frpp;
  22. }
  23. </script>
  24. </body>
  25. </html>

n°1637260
darkkrab
Posté le 05-11-2007 à 23:30:45  profilanswer
 

Dans le script original, le problème c'est que le "i" qui s'incémente vaut toujours 4 lors de l'appel des setTimeout puique la boucle est fini et fst[4] est undefined évidemment. Il faudrait trouver un moyen pour que la valeur suivent le setTimeout, quitte à créer des variables pour remplacer le "i".

n°1637276
Shinuza
This is unexecpected
Posté le 06-11-2007 à 01:13:22  profilanswer
 

@Gatsu, Masklinn, mIRROR : Vous êtes tous de gros cacas suintants  :o

 
Code :
  1. <script type="text/javascript">
  2. function acts(xw){
  3.     var q=0;
  4.     
  5.     for (var i=0; i<fst.length; i++){
  6.         setTimeout((function(x) {return    function(){Gfight_1(x)}}(fst[i])),q); q+=1100;
  7.         setTimeout((function(y) {return function(){Dfight_1(y)}}(snd[i])),q); q+=1100;
  8.     }
  9. }
  10. function Gfight_1(frpp){
  11.     document.getElementById("test" ).style.color="red";
  12.     document.getElementById("test" ).innerHTML+=frpp;
  13. }
  14. function Dfight_1(frpp){
  15.     document.getElementById("test" ).style.color="blue";
  16.     document.getElementById("test" ).innerHTML+=frpp;
  17. }
  18. </script>
 

Edit : C'est du code pas beau


Message édité par Shinuza le 06-11-2007 à 01:13:45

---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°1637299
masklinn
í dag viðrar vel til loftárása
Posté le 06-11-2007 à 06:59:03  profilanswer
 

c'est mirror qui m'a trompé en mettant pas ses paramètres au bon endroit [:sisicaivrai]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1637330
mIRROR
Chevreuillobolchévik
Posté le 06-11-2007 à 08:58:59  profilanswer
 

[:haha] j avais bien dit que j etais pas sur :o
mais c est vrai qu ca semble plus logique d un coup :D


---------------
« The enemy is the gramophone mind, whether or not one agrees with the record that is being played at the moment. » — George Orwell
n°1637378
anapajari
s/travail/glanding on hfr/gs;
Posté le 06-11-2007 à 09:47:53  profilanswer
 

@shinu> c'est quoi ce truc tout degueu ???
du setTimeout bourriné dans un for ça te dérange même pas :/
et un petit setInterval des fois  ?
 
Et puis l'exemple est un peu complètement ... euh ... pas bien.
Les deux setInterval font la même chose, du coup j'aurais bien vu un truc comme ça:

Code :
  1. function truc(){
  2.    var self = this;
  3.    self.snd = new Array(1,2,3);
  4.    self.fst = new Array(4,5,6);
  5.    self.i   = false;
  6.    self.intV = setInterval(function(){ self.fight()}, 1100);
  7. }
  8. truc.prototype.fight = function(){
  9.      var s; var color;
  10.      if ( this.i ){
  11.        color = 'blue';
  12.        s =this.snd.shift();
  13.      } else {
  14.        color = 'red';
  15.        s =this.fst.shift();
  16.      }
  17.      document.getElementById("test" ).style.color=color;
  18.      document.getElementById("test" ).innerHTML+=s;
  19.      this.i = ! this.i;
  20.      if ( ! this.snd.length ){ clearInterval(this.intV); return false;}
  21.      return true;
  22. }
  23. window.onload = function (){ var t = new truc();}


ça reste dégueu et améliorable mais au moins on comprends ce que ça fait :o

n°1637381
mIRROR
Chevreuillobolchévik
Posté le 06-11-2007 à 09:55:48  profilanswer
 

je crois que le monsieur aura 15000 inputs qui initialiseont 30000arrays differents  
tu peux pas les declarer dans ton objet :o


---------------
« The enemy is the gramophone mind, whether or not one agrees with the record that is being played at the moment. » — George Orwell
n°1637565
Shinuza
This is unexecpected
Posté le 06-11-2007 à 13:32:08  profilanswer
 

anapajari a écrit :

@shinu> c'est quoi ce truc tout degueu ???
du setTimeout bourriné dans un for ça te dérange même pas :/
et un petit setInterval des fois  ?
 
Et puis l'exemple est un peu complètement ... euh ... pas bien.
Les deux setInterval font la même chose, du coup j'aurais bien vu un truc comme ça:

Code :
  1. function truc(){
  2.    var self = this;
  3.    self.snd = new Array(1,2,3);
  4.    self.fst = new Array(4,5,6);
  5.    self.i   = false;
  6.    self.intV = setInterval(function(){ self.fight()}, 1100);
  7. }
  8. truc.prototype.fight = function(){
  9.      var s; var color;
  10.      if ( this.i ){
  11.        color = 'blue';
  12.        s =this.snd.shift();
  13.      } else {
  14.        color = 'red';
  15.        s =this.fst.shift();
  16.      }
  17.      document.getElementById("test" ).style.color=color;
  18.      document.getElementById("test" ).innerHTML+=s;
  19.      this.i = ! this.i;
  20.      if ( ! this.snd.length ){ clearInterval(this.intV); return false;}
  21.      return true;
  22. }
  23. window.onload = function (){ var t = new truc();}


ça reste dégueu et améliorable mais au moins on comprends ce que ça fait :o


J'ai juste corrigé le caca existant [:cosmoschtroumpf]
Pour que ça soit propre, faudrait déja que le code soit séparer du html  [:pingouino]


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°1637823
darkkrab
Posté le 06-11-2007 à 20:27:33  profilanswer
 

J'ai trouvé.  :sweat:

Code :
  1. function acts(xw){
  2. var q=0;
  3. var a=0;
  4. for (var i=0; i<fst.length; i++){
  5. setTimeout(function(){Gfight_1(xw,fst[a])},q);q+=1100;
  6. setTimeout(function(){Dfight_1(xw,snd[a++])},q);q+=1100;
  7. }
  8. }

n°1637987
anapajari
s/travail/glanding on hfr/gs;
Posté le 07-11-2007 à 09:42:30  profilanswer
 

c'est code est toujours de la grosse bouse [:spamafote]

  • tu ne parcours qu'un element sur deux de tes tableaux fst/snd
  • rien ne garantit que le snd[a++] existe et que tu vas pas te manger un undefined
  • si tu as 10 elements dans fst, tu vas créer 10 timers alors qu'un interval aurait suffi


Tu veux pas refaire ça proprement :??:

n°1638501
darkkrab
Posté le 07-11-2007 à 17:07:45  profilanswer
 

L'array fst et snd ont toujours la même longueur, maximum 20 par bouton.
Le but n'est pas de changer la couleur d'un texte, sinon j'aurais opter pour un setInterval. De plus, il faudrait mettre Gfight_1 et Dfight_1 dans le même setInterval.

n°1638561
anapajari
s/travail/glanding on hfr/gs;
Posté le 07-11-2007 à 17:54:21  profilanswer
 

darkkrab a écrit :

L'array fst et snd ont toujours la même longueur, maximum 20 par bouton.


Super donc au lieu de faire 1 setInterval tu fais 40 setTimeout :/

darkkrab a écrit :

Le but n'est pas de changer la couleur d'un texte, sinon j'aurais opter pour un setInterval. De plus, il faudrait mettre Gfight_1 et Dfight_1 dans le même setInterval.


Oui et ??? ou est la difficulté?

n°1638608
darkkrab
Posté le 07-11-2007 à 19:28:34  profilanswer
 

Code :
  1. var q=0;
  2. function acts(xw){
  3. if(q==0){Gfight_1(xw,fst.shift());q=1}else{Dfight_1(xw,snd.shift());q=0}
  4. if(snd.length>0){setTimeout(function(){acts(xw)},1100)}
  5. }

Message cité 1 fois
Message édité par darkkrab le 07-11-2007 à 20:16:02
n°1638705
Shinuza
This is unexecpected
Posté le 08-11-2007 à 07:13:52  profilanswer
 

C'est toujours aussi moche, les deux fonctions font la même chose à un paramètre près, aucun interet.


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°1638731
anapajari
s/travail/glanding on hfr/gs;
Posté le 08-11-2007 à 08:56:48  profilanswer
 

+1
et puis pourquoi refuses tu obstinément de faire un setInterval?

n°1639492
darkkrab
Posté le 08-11-2007 à 18:52:17  profilanswer
 

Je l'ai fait, mais c'est moins précis dans le temps. (1100 * 20 n'égal pas  2200) avec un setInterval.
Mais j'utilise des setInterval pour des choses moins importantes.

Message cité 1 fois
Message édité par darkkrab le 08-11-2007 à 18:54:01
n°1639533
mIRROR
Chevreuillobolchévik
Posté le 08-11-2007 à 20:24:40  profilanswer
 

(1100 * 20 n'égal pas  2200) avec un setInterval.  
 
toutes les calculettes confirment pourtant [:dawa]


---------------
« The enemy is the gramophone mind, whether or not one agrees with the record that is being played at the moment. » — George Orwell
n°1639534
masklinn
í dag viðrar vel til loftárása
Posté le 08-11-2007 à 20:26:48  profilanswer
 

darkkrab a écrit :

Je l'ai fait, mais c'est moins précis dans le temps. (1100 * 20 n'égal pas  2200) avec un setInterval.


Avec un setTimeout non plus.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1639626
darkkrab
Posté le 08-11-2007 à 22:44:38  profilanswer
 

darkkrab a écrit :

Code :
  1. var q=0;
  2. function acts(xw){
  3. if(q==0){Gfight_1(xw,fst.shift());q=1}else{Dfight_1(xw,snd.shift());q=0}
  4. if(snd.length>0){setTimeout(function(){acts(xw)},1100)}
  5. }


Cette fonction n'accumule pas les setTimeout, c'est l'important.

Message cité 1 fois
Message édité par darkkrab le 08-11-2007 à 22:56:21
n°1639867
SICKofitAL​L
misanthrope
Posté le 09-11-2007 à 11:38:49  profilanswer
 

darkkrab a écrit :

Cette fonction n'accumule pas les setTimeout, c'est l'important.


 
paske tu appelles tjrs la même fonction en fait :/
essaye d'instancier la fonction à chaque appel ("...setTimeout (new function () { acts (xw) }, 1100); ..." )
 
A tester


---------------
We deserve everything that's coming...
n°1640045
mIRROR
Chevreuillobolchévik
Posté le 09-11-2007 à 13:13:50  profilanswer
 

ha oui le new ca change tout [:moule_bite]


---------------
« The enemy is the gramophone mind, whether or not one agrees with the record that is being played at the moment. » — George Orwell
n°1640050
Shinuza
This is unexecpected
Posté le 09-11-2007 à 13:21:15  profilanswer
 

SICKofitALL a écrit :


 
paske tu appelles tjrs la même fonction en fait :/
essaye d'instancier la fonction à chaque appel ("...setTimeout (new function () { acts (xw) }, 1100); ..." )
 
A tester

Si y'avais une idée à la con, cétait celle ci, merci. (en plus de rien changer au problème et proposer une solution qui ne résoud même pas l'hypothétique (et éronné) problème pointé.)


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°1640076
SICKofitAL​L
misanthrope
Posté le 09-11-2007 à 13:37:57  profilanswer
 

ah ben oui mais bon je disais bien que c'était à tester, j'ai pas dit que ca résoudrait le "soucis" :o


---------------
We deserve everything that's coming...
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Passer les arguments d'un Array dans un setTimeout.

 

Sujets relatifs
Passer une variable dans une fonctionPasser une liste a une fonction?
Uploader un fichier sans passer par Parcourirrequete affiche un bouton AouB dans un array qui verifi a chaque ligne
Passer un évènement en paramètre de fonction[CSS? JavaScript? Paint?]J'vais sûrement passer pour un con mais...
Trouver un élément dans un tableau, facile pour qui s'y connait !Array et nom de champs
Passer souris sur photo pour afficher une image dans un cadrepagination avec un array
Plus de sujets relatifs à : Passer les arguments d'un Array dans un setTimeout.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR