setInterval / clearInterval
Stefan
- javascript
Hallo zusammen,
normal kann man ein Interval ja per
//start
var testIntervall = window.setInterval(test(),2000);
//stop
window.clearInterval(testIntervall);
starten und stoppen.
Nun komme ich leider nicht an die IntervallID ran.
Gibt es eine möglichkeit einfach alle Intervalle im "window" zu "killen"???
Wäre super, wenn mir jemand einen Tipp hat...
Danke
Gruß Stefan
Nun komme ich leider nicht an die IntervallID ran.
Warum nicht?
Gibt es eine möglichkeit einfach alle Intervalle im "window" zu "killen"???
Nein.
Struppi.
Nun komme ich leider nicht an die IntervallID ran.
Warum nicht?
gute Frage :s
die Variable des Interval hat bei mir den Wert 3, wenn ichd aber versuche window.clearInterval(Variable), dann passiert nix, bzw das interval rennt weiter.. warum auch immer....
kann ich in der Funktion, die im Interval aufgerufen wir irgendwie die IntervalID herausbekommen?
Gibt es eine möglichkeit einfach alle Intervalle im "window" zu "killen"???
Nein.
Struppi.
Vielleicht ist der Bug auch hier im Code versteckt :s
Ich weiß nicht mehr weiter,
danke schonmal für Eure Hilfe!
Mein Code mit dem ich das Ganze versuche:
var farbe = 1;
var counteraktiv;
var counterstart = "stop";
var startcount = "no";
function LoadPage(page,formdata) {
.....
counterstart = 120;
startcount = "yes";
....
xmlhttp.onreadystatechange = function(){
....
if (startcount == "yes"){
counteraktiv = window.setInterval("counter('down')", 1000);
}
}
}
function counter (type) {
if (counterstart == "stop"){
window.clearInterval(counteraktiv);
document.body.style.backgroundImage = "url('/images/background_stripes.png')";
document.getElementById('timer').innerHTML="test";
}
else {
if (type == "down"){
counterstart = counterstart - 1;
if (counterstart <= 90){
if (farbe == 1){
document.body.style.backgroundImage = "none";
document.bgColor = "red";
farbe = 2;
}
else {
document.body.style.backgroundImage = "url('images/background_stripes.png')";
document.bgColor = "#c5ccd4";
farbe = 1;
}
}
}
else {
counterstart = counterstart + 1;
}
if (counterstart > 0){
var min = Math.floor(counterstart / 60);
var sec = counterstart - (min * 60);
}
if (document.getElementById('timer') == null){
window.clearInterval(counteraktiv);
document.body.style.backgroundImage = "url('images/background_stripes.png')";
document.getElementById('timer').innerHTML="test";
}
else if (min > 0){
document.getElementById('timer').innerHTML = min + "''" + sec + "'";
}
else {
document.getElementById('timer').innerHTML = sec + "'";
}
}
//if (i >= 10)
// window.clearInterval(aktiv);
}
counteraktiv = window.setInterval("counter('down')", 1000);
..
window.clearInterval(counteraktiv);
Prima, genau so funktioniert es. Wenn es bei dir nicht so ist, machst du etwas falsch. Leider lassen sich deine Codefragmente nicht testen, daher kann ich nicht sagen was.
An die ID kommst du nicht, das ist ein Objekt, die Zahl die es repräsentiert nützt dir nichts.
Struppi.
counteraktiv = window.setInterval("counter('down')", 1000);
..
window.clearInterval(counteraktiv);Prima, genau so funktioniert es. Wenn es bei dir nicht so ist, machst du etwas falsch. Leider lassen sich deine Codefragmente nicht testen, daher kann ich nicht sagen was.
An die ID kommst du nicht, das ist ein Objekt, die Zahl die es repräsentiert nützt dir nichts.
Struppi.
irgendwo muss ein Denkfehler bei mir sein :s
nur die Frage: wo habe ich mich da verzettelt....
findet evtl jemand was?
Danke schonmal!
[latex]Mae govannen![/latex]
xmlhttp.onreadystatechange = function(){
....
if (startcount == "yes"){
counteraktiv = window.setInterval("counter('down')", 1000);
}
}
Wundert mich nicht. readystatechange wird im Zuge eines Requests mehrfach aufgerufen, du überschreibst hier jedes Mal counteraktiv mit einem neuen Wert, die alten Intervalle laufen weiter, sind aber durch das Überschreiben des Wertes nicht mehr erreichbar. Du stoppst also nur die letzte Intervall-Instanz
Cü,
Kai
[latex]Mae govannen![/latex]
xmlhttp.onreadystatechange = function(){
....
if (startcount == "yes"){
counteraktiv = window.setInterval("counter('down')", 1000);
}
}Wundert mich nicht. readystatechange wird im Zuge eines Requests mehrfach aufgerufen, du überschreibst hier jedes Mal counteraktiv mit einem neuen Wert, die alten Intervalle laufen weiter, sind aber durch das Überschreiben des Wertes nicht mehr erreichbar. Du stoppst also nur die letzte Intervall-Instanz
Cü,
Kai
Hi Kai, danke erstmal,
aber ich habe was vergessen, SORRY:
xmlhttp.onreadystatechange = function(){
//Check page is completed and there were no problems.
if ((xmlhttp.readyState == 4) && (xmlhttp.status == 200)) {
....
if (startcount == "yes"){
counteraktiv = window.setInterval("counter('down')", 1000);
}
....
}
}
so dürfte es doch nur einmal aufgerufen werden, oder?
so dürfte es doch nur einmal aufgerufen werden, oder?
warum überprüfst du es nicht einfach?
if(counteraktiv)
alert('Achtung counter ist aktiv!');
else
counteraktiv = window.setInterval("counter('down')", 1000);
Struppi.
[latex]Mae govannen![/latex]
die Variable des Interval hat bei mir den Wert 3, wenn ichd aber versuche window.clearInterval(Variable), dann passiert nix, bzw das interval rennt weiter.. warum auch immer....
Das kann eigentlich nicht sein. Entweder verwechselst du die Intervalle (der Wert "3" besagt, daß du weitere Intervalle hast) oder du startest das besagte Intervall mehrfach oder an mehreren Stellen und "killst" nicht alle Instanzen.
Cü,
Kai
hi,
Nun komme ich leider nicht an die IntervallID ran.
Doch, die steht hier drin: testIntervall
Gibt es eine möglichkeit einfach alle Intervalle im "window" zu "killen"???
statt
IntervalProcess = window.setInterval();
mach ein
var procs = new Attay();
und dann ein push:
procs.push(window.setInterval());
damit kannst Du alle Intervalprozesse killen. Sofern User selbst Intervalprozesse starten dürfen, musst Du ein bischen aufpassen, sonst tanzt Dir der Browser weg ;-)
Rolf