setTimeout...

Mammouth du PHP | 601 Messages

08 déc. 2006, 05:49

Bonjour,
voilà après l'envoi d'un message je voudrai masquer un calque
http://creatif-web.be/marguerite/contact.php
if(isset($_POST['pseudo']) && isset($_POST['comment']))
{
	include('inc/reception_contact.php');
	echo ' <script>
  setTimeout(" new Effect.BlindUp(\'formname\', 5)", 500);
  //clearTimeout(timer);
  </script>';
}
Alors sa fonctionne tel quel, mais i lsemble que cette fonction prend pas mal de ressource sur le client, donc je voudrai utilisez "cleartimeout" pour tuer le timer, mais sa ne fonctionne pas.
	echo ' <script>
  var timer=setTimeout(" new Effect.BlindUp(\'formname\', 5)", 500);
  clearTimeout(timer);
  </script>';
http://xavier-artot.com
¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·°'´¨
système d'exploitation "Ubuntu 7.10"

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

09 déc. 2006, 12:29

La fonction clearTimeout n'a pas pour but de liberer des ressources mais simplement de stopper un timeout défini précédement (ce qui du coup aura effectivement pour effet de liberer celles qu'il prenait ;)). Si tu l'exécute juste après avoir défini ton timer, c'est normal qu'il ne s'exécute plus :)

L'intérêt est donc juste d'empêcher l'événement de se déclencher.

De même tu as les fonction setInterval() et clearInterval() pour respectivement déclencher un événement à interval régulier, et pour interrompre ce déclenchement :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 601 Messages

09 déc. 2006, 15:48

Donc sa doit sécrire come sa, on ne sait jamais vraiment pour la syntaxt, il n'y a pas comme en php une doc.

Code : Tout sélectionner

echo ' <script> var timer=setTimeout(" new Effect.BlindUp(\'formname\', 5)", 500); clearTimeout(timer, 550); </script>';
http://xavier-artot.com
¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·°'´¨
système d'exploitation "Ubuntu 7.10"

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

09 déc. 2006, 16:09

Bah, un p'tit coup d'oeil sur google et tu as toutes les infos dont tu as besoin sur cette fonction ou même sur les retardateurs :
- http://www.aidejavascript.com/article75.html

Ton clearTimeout() arrête le timer au moment ou tu l'appelles, y a pas d'autres paramètres à lui passer que le nom du timer. L'intérêt est uniquement d'annuler le déclenchement qui doit survenir. Ca ne libère pas plus de ressource que de laisser le timer aller au bout.

Sachant que de toute façon, le timeout, contrairement à l'interval, s'arrête tout seul une fois déclenché, donc pas besoin d'un clear une fois que l'action a eu lieu :)

Il n'y a pas vraiment de solution à ce problème. Tu ne peux pas utiliser un setTimeout sans consommer de ressources supplémentaires, comme tu ne peux pas libérer ces ressources sans interrompre le timeout. Au mieux, tu peux essayer de trouver un autre moyen de délencher l'événement, sur une action utilisateur par exemple :) Il n'y aura ainsi rien qui tournera inutilement en attendant que l'événement se produise ou que le timer soit écoulé.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 601 Messages

09 déc. 2006, 18:29

pourtant sur se site sa doit être une erreur, il précise :
mais on aura beoin de la variable timer pour tuer le timer.

http://www.aidejavascript.com/article75.html

Donc je retiens simplement que le cleartimeout() est inutile.
http://xavier-artot.com
¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·°'´¨
système d'exploitation "Ubuntu 7.10"

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

09 déc. 2006, 18:48

Donc je retiens simplement que le cleartimeout() est inutile.
Bah si il est utile, c'est lui qui permet d'interrompre le timer, mais uniquement à condition que celui-ci tourne ronthudjiou ! #-o
C'est juste qu'il n'est pas adapté à ce que tu veux faire ;)
pourtant sur se site sa doit être une erreur, il précise :
mais on aura beoin de la variable timer pour tuer le timer.
En effet, pour pouvoir tuer le timer à l'aide de la fonction clearTimeout(), il faut obligatoirement avoir stocker la référence au setTimeout() dans une variable (timer) que tu passeras en paramètre à la fonction clearTimeout() pour qu'elle sache quel timer arrêter :)

L'intérêt du clear pourrait être par exemple sur une page qui te dis que tu va être automatiquement redirigé dans 10 secondes. On va donc avoir un setTimeout() qui va déclencher la redirection dans 10 secondes. Mais si je veux permettre aux gens de rester plus longtemps, je colle un bouton sur ma page qui va faire un clearTimeout() et arrêter le timer pour empêcher la redirection auto.
Donc soit le bonhomme clique dessus et le timer s'arrête et rien ne se passe, soit il attend 10 secondes, le timer s'arrête et la redirection (ou autre) s'effectue :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 601 Messages

09 déc. 2006, 19:41

merci pour t'est réponses très pertinentes.
http://xavier-artot.com
¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·°'´¨
système d'exploitation "Ubuntu 7.10"