begin process at 2012 05 29 07:36:29
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Javascript / DHTML / Ajax

 > 

JavaScript et le navigateur

 > 

Autre

 > 

Comportement étrange de setTimeout(), il "mémorise" les évènements


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

Comportement étrange de setTimeout(), il "mémorise" les évènements

jeudi 3 juin 2010 à 16:48:50 | Comportement étrange de setTimeout(), il "mémorise" les évènements

nitrique

Bonjour à tous,

J'ai une appli Web qui permet de faire défiler des contenus ("Steps") de la manière d'un diaporama.
Il y a 2 modes de défilement des steps: Auto (un temps est défini pour chaque step) et manuel (clic sur un bouton).

Voici le problème (l'incohérence n'apparait que sous IE):
L'appli démarre en mode auto, les temps d'affichage des steps sont bien respectés.
Passons au mode manuel et naviguons... Lorsqu'on revient au mode procédure, les steps s'enchaînent à la même vitesse que celle à laquelle on les a fait défiler dans le mode manuel. Le setTimeout() est complètement perturbé.
J'ai essayé des clearTimeOut() à gogo, mais rien n'y fait.

J'ai isolé le cas de figure dans un exemple simple et autonome:
Code HTML :
<html><head><title>TEST</title>
<script type="text/javascript">
	var tab = new Array(5, 1, 3, 5, 1, 5, 5, 5, 5, 5, 5, 5, 5); // Tableau du temps d'affichage de chaque Step
	var idx = 0; // Index du step en cours
	var modeDefilAuto = true; // Mode de défilement actuel (auto/manuel)
	
	function afficheStep() { // Affiche le step de l'idx en cours
		document.getElementById("divMain").innerHTML = "Etape: "+idx+" ("+tab[idx]+" sec)<br />Défilement Auto: "+modeDefilAuto
			+".<script language='javascript'>setTimeout('faireNext();', "+(tab[idx] * 1000)+");<\/script>";
		for (var i=0; i<document.getElementById("divMain").getElementsByTagName("script").length; i++) { // Boucle pour que le javascript injecté soit interpreté
			eval(document.getElementById("divMain").getElementsByTagName("script")[i].innerHTML);
        }
	}
	
	function changeMode() { // Passe du mode auto au mode manuel et inversement
		modeDefilAuto = ! modeDefilAuto;
		idx = 0;
		afficheStep();
	}
	
	function nextStep() { // Passe au step suivant
		if (idx<12) {
			idx++;
			afficheStep();
		}
	}
	
	function faireNext() {
		if (modeDefilAuto) {
			nextStep(); 
		}
	}
</script>
</head><body onLoad="afficheStep();">
<center>
<br />
<div id="divMain" style="background-color:#CCCCCC;">Principal</div><br />
<input type="button" value="Step suivant" onClick="nextStep();" />
<input type="button" value="Changer de mode" onClick="changeMode();" />
</center>
</body></html>

Pouvez vous me donner une explication ?

Merci d'avance.
vendredi 4 juin 2010 à 22:45:36 | Re : Comportement étrange de setTimeout(), il "mémorise" les évènements

PetoleTeam

Membre Club
Réponse acceptée !
Bonjour,
il serait souhaitable que tu killes le timer, avec clearTimeout, avant de rappeler la fonction setTimeout.
PS : drôle de façon d'activer le javascript !!!

;O)
mardi 8 juin 2010 à 10:47:32 | Re : Comportement étrange de setTimeout(), il "mémorise" les évènements

nitrique

Bonjour PetoleTeam,

Impec, c'était ça... Je le faisait, mais pas ou il fallait.

Oui, pour la façon d'activer le JS, j'ai chopé ça sur la toile... Ça fonctionne pas mal.

Merci.
mardi 8 juin 2010 à 18:43:16 | Re : Comportement étrange de setTimeout(), il "mémorise" les évènements

PetoleTeam

Membre Club
Bonjour,
le principal est que cela marche même si ta façon de procéder me laisse un peu pantois...

;O)
mardi 8 juin 2010 à 21:07:09 | Re : Comportement étrange de setTimeout(), il "mémorise" les évènements

nitrique

En effet... Mais c'est fait exprès.

En fait, mon appli est en jQuery+PHP.
En ajax, je met le code javascript dans le DIV depuis un script PHP pour ne pas avoir à rafraichir la page.
J'ai voulu reproduire le cas en Javascript pur le plus fidèlement possible pour bien identifier le problème, voir si ça ne venait pas d'autre chose.

Voilà, pour ne pas vous laisser pantois.


Cette discussion est classée dans : auto, mode, settimeout, idx, steps


Répondre à ce message

Sujets en rapport avec ce message

Problème : window.blur() [ par Mickael ] Salut !j'ai cette fonction :setTimeout("xtpop.blur();",10000); // je réduit la popup au bout de 10 sec .setTimeout("xtpop.?????();",10000); // je veux Combo box et redirection auto [ par evilfrog83 ] J'ai une liste déroulante, et j'aimerais que le choix d'une option de cette liste envoie directement sur une autre page, dans une autre frame. (main_f menu dynamique [ par mamy ] Bonjour,voilà je dois créer une page web pour un site de vente en lignesur ma page d'accueil je vais afficher le menu avec les grandes catégories de p Div, police, .... [ par stephbb75 ] Salut tous,J'ai un tit problème et je trouve pas la solution !J'ai un div, et je voudrais pouvoir changer la taille de la police de caractére pour tou Formulaire avec tableau auto dimensionné selon la taille de la fenetre [ par julien71 ] Je dois faire un tableau qui se redimensionne selon la taille de la fenetre.Les données sont stockées dans un tableau qui contient des enregistrements SeTtimeout et frame [ par fcdconnect ] petit probleme ce script ne fonctionne pas (le timeout)onClick="javascript:setTimeout(parent.topFrame.document.location.reload(),4000);"l'objectif est Exécution ok en mode débug - ko en direct [ par Bruto ] J'ai créé un applet pour envoyer des mials en interne, ...Celui-ci marche bien en débogage directement dans le compiltateur J++ & netbeansMais lorsque popup auto ajustable. comment faire? [ par MarsL ] j'ai une popup qui s'ouvre avec ce source :function popup() { nom=document.forms[0].appli_nom.value; window.open('/LGAppli/servlet/LGAppli_telecha Détection d'un navigateur I-mode?? [ par OniJ ] Bonjour,J'aimerai savoir si il existe un moyen de détecté un navigateur i-mode avec un javascript?CARPE DIEM Remplissage auto d'un formulaire [ par adadoudou ] Bonjour, J'ai créer un formulaire contenant une liste déroulante et plusieurs zones de texte à remplir. J'aimerais savoir comment je pourrais faire po


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 : 0,499 sec (3)

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