Javascript setInterval, passage de param ?

Résolu/Fermé
monkey_monk Messages postés 641 Date d'inscription mercredi 1 juillet 2009 Statut Membre Dernière intervention 10 août 2012 - 30 oct. 2009 à 16:35
monkey_monk Messages postés 641 Date d'inscription mercredi 1 juillet 2009 Statut Membre Dernière intervention 10 août 2012 - 30 oct. 2009 à 18:02
Bonjour,

je n'arrive pas à faire passer un paramètre via un setInterval... je m'explique :

j'essaye d'arriver à passer une variable (ID) à une fonction (suivant) qui est appelée par mon setInterval.

Pour l'exemple, on va dire que ma fonction suivant est comme ceci :
function suivant(id){
  alert("je suis dans 'suivant'");
  alert(id);
}

J'ai essayé ceci :
interval = setInterval("suivant("+ID+")", tempsAttente);

et ceci :
interval = setInterval("suivant(ID)", tempsAttente);


Mais j'ai toujours une erreur disant que la fonction suivant() ne connait pas l'ID. (mon 2nd alert n'est pas déclenché)

Quelqu'un aurait une explication ou mieux, une solution ?

Merci beaucoup ! ;)
A voir également:

11 réponses

InAme19 Messages postés 539 Date d'inscription samedi 13 septembre 2008 Statut Membre Dernière intervention 29 novembre 2012 62
30 oct. 2009 à 16:39
comment déclares tu ta variable ID? et où?

fais un test avec une variable bidon. var ID = 2 par exemple.
0
monkey_monk Messages postés 641 Date d'inscription mercredi 1 juillet 2009 Statut Membre Dernière intervention 10 août 2012 130
30 oct. 2009 à 16:54
Bonjour InAme19 et merci pour ta réponse ! :D

J'ai effectivement essayé avec un variable test mais le résultat est le même...

Pour mieux comprendre mon problème voici à quoi ressemble mon script :
var interval;
var test = 'pouitch';
var startAuto = true;

function start(ID){
  alert('1er alert :'+ID);
  interval = setInterval("suivant("+ID+")", 5000);
}

function suivant(identifiant){
  alert('2nd alert :'+identifiant);
}

if(startAuto == true){
  start(test);
}


Le premier alert apparait avec un joli 'pouitch' mais le second pas... et tous les tests que j'ai pu faire pour vérifier le passage d'arguments via le setInterval se sont trouvé infructueux...

Il me semble donc bien que mon problème est du au setIntreval, mais impossible de trouver un exemple de passage de variable comme je le tente ici...

0
InAme19 Messages postés 539 Date d'inscription samedi 13 septembre 2008 Statut Membre Dernière intervention 29 novembre 2012 62
30 oct. 2009 à 16:58
hum...

et si tu tentes un appel sans tes "

genre: interval = setInterval( suivant( ID ) , 5000);

EDIT: non en fait il faut bien les mettre, je regarde ça en local ;)
0
monkey_monk Messages postés 641 Date d'inscription mercredi 1 juillet 2009 Statut Membre Dernière intervention 10 août 2012 130
30 oct. 2009 à 17:03
Bah en fait, je viens de tester la même théorie à l'instant et ça fonctionne... je ne comprends vraiment plus rien moi !

Soit, l'important c'est que ça marche comme il faut ! :p
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
InAme19 Messages postés 539 Date d'inscription samedi 13 septembre 2008 Statut Membre Dernière intervention 29 novembre 2012 62
30 oct. 2009 à 17:06
Ah ok, oui c'est bizare, je regarderai ça aussi ^^
0
monkey_monk Messages postés 641 Date d'inscription mercredi 1 juillet 2009 Statut Membre Dernière intervention 10 août 2012 130
30 oct. 2009 à 17:09
Ah bah je suis vraiment largué !

Il semblerait que quand je fais : interval = setInterval(suivant(ID), 5000);

ma fonction suivant reçoit bien la variable... par contre il déclenche la fonction sans attendre les 5 secondes !

...je commence à vouloir taper dedans... :D
0
InAme19 Messages postés 539 Date d'inscription samedi 13 septembre 2008 Statut Membre Dernière intervention 29 novembre 2012 62
30 oct. 2009 à 17:11
oui sans mettre les " il doit directement rentrer dans la fonction suivant() et donc ne fait pas le setInterval
0
monkey_monk Messages postés 641 Date d'inscription mercredi 1 juillet 2009 Statut Membre Dernière intervention 10 août 2012 130
30 oct. 2009 à 17:24
OKKAYY !! :D

CA MARCHEUH ! (presque 3h dessus quand mm... et pas moyen de trouver une doc javascript valide...)

Alors bon, je sais pas pourquoi... mais il semblerait que l'on doivent faire comme ceci :
interval = setInterval(function(){suivant(identifiant);},5000);


Et de cette manière le paramètre est bien passé !

Drôle de mic-mac mais bon... j'ai quand même réussis et j'suis trop fier là ! :p
0
InAme19 Messages postés 539 Date d'inscription samedi 13 septembre 2008 Statut Membre Dernière intervention 29 novembre 2012 62
30 oct. 2009 à 17:32
Ah je ne connaissais pas cette méthode, tant mieux si ça marche ;)

par contre je viens de lire un truc... non ne me tape pas!! ><
"setInterval() pose des problèmes de compatibilité avec certains navigateurs de version 4. Il est plus sûr d'utiliser setTimeout()."

à cette adresse: https://www.toutjavascript.com/reference/ref-window.setinterval.php
0
InAme19 Messages postés 539 Date d'inscription samedi 13 septembre 2008 Statut Membre Dernière intervention 29 novembre 2012 62
30 oct. 2009 à 17:36
ah ^^ c'est bon si tu remplaces par setTimeout() ça marche aussi!

j'ai testé:

<SCRIPT language=javascript>
var interval;
var test = 'pouitch';
var startAuto = true;

function start(ID){
  alert('1er alert :'+ID);
  interval = setTimeout(function(){suivant(ID);},5000);
}

function suivant(identifiant){
  alert('2nd alert :'+identifiant);
}

if(startAuto == true){
  start(test);
}
</SCRIPT>


j'ai juste remplacé le nom de la fonction à ta méthode et ça marche ;)
0
monkey_monk Messages postés 641 Date d'inscription mercredi 1 juillet 2009 Statut Membre Dernière intervention 10 août 2012 130
30 oct. 2009 à 18:02
Wah cool ! Et en plus tu fais le test à ma place ! Terrible ! XD

Merci beaucoup ! ;)
0