2016-05-01 1 views
2

Ich kann diesen Code nicht dazu bringen, etwas anderes zu tun als bis 29 von 30 zu zählen. Hat jemand irgendwelche Einsichten oder Hinweise, was ich falsch mache, damit es nur einmal ausgeführt wird? Ich habe überprüft, um sicherzustellen, dass alle Funktionen mit console.logs auf game.time aufgerufen werden (mit Ausnahme der ClearInterval, da es bereits nach dem ersten Mal durchhält). Wie bekomme ich den setInterval Looping bis 0? Vielen Dank im Voraus für jede Hilfe! :)setInterval wird nicht fortgesetzt

//game object to contain variables and methods 

var game = { 

    // variable for time 

    time: 30, 

    // Start button onclick creates the time remaining object and calls the forloop to start 

    start: function() { 
     // $("#time").html(game.time); 
     game.countdown = setInterval(game.count(), 1000); 

    }, //end of start function 

    //what the set interval does which is subtract one second from game.time 

    count: function() { 

     game.time--; 

     // if statement to check when time gets to zero 

     if (game.time <= 0) { 
      game.stop(); 
     } 

     // puts the current time left on the page 
     else { 
      $("#time").html(game.time); 
     } 

    }, // End of count function 

    // stops the set interval 

    stop: function() { 
     clearInterval(game.countdown); 
    }, // end of stop function 


}; // end game object 

// Start button click calls the start method 

$("#start").click(game.start); 
+0

Hallo Robert, begrüßen SO! Danke für eine klare, gut formatierte Frage mit Codebeispielen :) – Ben

Antwort

2

setInterval nimmt eine Funktion refererence als Parameter, sollte es wie folgt aussehen:

setInterval(game.count, 1000) 

Wenn Sie es als game.count() schreiben, sind Sie die count() Methode einmal anrufen, das ist sofort ausgewertet.

Dann setInterval ‚Unterschrift ist der Rückgabewert von diesem Verfahren anstelle einer Funktionsreferenz verwenden:

setInterval(whatever_the_return_value_was, 1000); 

, indem nur die Referenz Passing (als game.count), der Zeitgeber sollte wie erwartet funktionieren. Es wird die Referenz alle 1000ms selbst aufrufen.

(MDN docs)

+0

Vielen Dank für Ihre Antwort. Genau das war falsch! –