2011-05-02 3 views
0

Je rencontre un problème avec ce script JavaScript. J'ai essayé un certain nombre de choses pour le faire fonctionner. Les alertes présentes ici sont là pour le débogage, et semblent ne pas se produire.Débogage des événements de synchronisation JavaScript

Aidez s'il vous plaît?

function checkTime(this_time){ 
var the_string = "checkTime("+this_time+")"; 
var now = ((new Date()).getTime()); 
if(parseInt(now) >= parseInt(this_time)){ 
    document.write("TIMEUP!"); 
} 
alert(now); 
alert(this_time); 
var t = setTimeout(the_string,300); 
} 

var the_time = (((new Date()).getTime())+19000); 
var the_string = "checkTime("+the_time+")"; 
var t = setTimeout(the_string,300); 

Merci,

Will.

Répondre

1

On dirait que vous êtes à la recherche d'un compte à rebours?
Voir this fiddle. Le code est simplifié à:

var bench = 19000 + new Date().getTime(), 
    timer = setInterval(
       function(){ 
       checkTime(bench); 
       } 
       , 1000 
      ); 

function checkTime(this_time){ 
    var check = new Date - this_time; 
    if(check>=0){ 
     alert('time\'s up!'); 
     clearInterval(timer); 
    } 
} 
+0

Voir mon violon pour un sans var externe :) – mplungjan

+0

@ mplungjan: yip, vu. Voir aussi http://jsfiddle.net/KooiInc/Bye2V/ – KooiInc

1

Vous devez utiliser setTimeout avec des fermetures au lieu de chaînes.

var now = new Date().getTime(); 
setTimeout(function(){ 
    //your Javascript code here 
    //"now" can be used here as a closure 
}, 300); 
+0

@Mic Merci pour la réponse. J'ai essayé de changer le script, mais ça ne marche toujours pas. Pas une seule boîte d'alerte. :/ –

+0

C'est une bonne première étape;) Quand vous jouez avec des événements chronométrés, 'alert' arrête le flux, vous devez utiliser' console.log (...) 'Mais malheureusement, je ne comprends pas ce que vous essayez de faire avec ce code. – Mic

+0

Si vous voulez réagir après 19sec, pourquoi ne pas mettre 19000 au timeout? Si vous voulez vérifier toutes les 300ms jusqu'à ce qu'il atteigne 19sec vous devez utiliser 'setInterval' au lieu de' setTimeout' – Mic

0

Je suppose que le code pourrait être rendu plus simple à travailler.

function checkTime(this_time){ 
    var now = ((new Date()).getTime()); 
    if((now - this_time) >= 0){ 
     document.write("TIMEUP!"); 
     window.clearInterval(timer); 
    } 
} 

var t_t = (((new Date()).getTime())+19000); 

var timer = window.setInterval(function(){ 
    checkTime(t_t); } 
, 300); 

Cheers!

+0

@Ashit Soota Merci beaucoup, mais j'ai inséré alert(); 's pour tester la présence de this_time et maintenant, mais pas une seule alerte a été faite, ni était la chaîne écrite. :/ –

+0

'setTimeout (fonction() {document.write (" TIMEUP! ");}, 19000)' fait la même chose, n'est-ce pas? :) – Mic

+0

Mais je pensais que le problème est que le navigateur compte parfois 19 secondes comme 23 secondes réelles, car le JavaScript ralentit? –

1

Voici une version plus sûre et autonome. Un document.write après la charge effacera la page complètement

http://jsfiddle.net/mplungjan/Zt5k7/

window.onload=function() { 
    var timer = function (endTime) { 
    var end = new Date(endTime); 
    var tId; 
    this.checkTime=function(){ 
     var now = new Date(); 
     document.getElementById("msg").innerHTML=now.toLocaleString(); 
     if (now.getTime()>=end.getTime()) { 
     document.getElementById("msg").innerHTML="TIME's UP!"; 
     clearInterval(tId); 
     } 
    } 
    tId = setInterval(this.checkTime,300); 
    }(new Date().getTime()+5000); 
} 

ou pour un compte à rebours approprié http://jsfiddle.net/mplungjan/Zt5k7/1/

window.onload=function() { 
    var timer = function (endTime) { 
    var end = new Date(endTime); 
    var tId; 
    this.checkTime=function(){ 
     var now = new Date(); 
     document.getElementById("msg").innerHTML=now.toLocaleString(); 
     var diff = end.getTime()-now.getTime() 
     if (diff >= 1) document.getElementById("msg").innerHTML=parseInt(diff/1000)+1; 
     else { 
     document.getElementById("msg").innerHTML="TIME's UP!"; 
     clearInterval(tId); 
     } 
    } 
    tId = setInterval(this.checkTime,300); 
    }(new Date().getTime()+9000); 
}