Stefan: setInterval / clearInterval

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

  1. 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.

    1. 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.

      1. 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);  
        }  
          
        
        
        1. 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.

          1. 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!

        2. [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

          --
          Even if you are a master of jQuery, you can only create mediocre (at best)
          scripts. The problem is that the authors you rely on have not mastered the
          DOM themselves. It's like one blind guy leading another off a cliff (D.Mark/clj)
          Foren-Stylesheet Site Selfzeug JS-Lookup
          SelfCode: sh:( fo:| ch:? rl:( br:< n4:( ie:{ mo:| va:) js:| de:> zu:) fl:( ss:| ls:?
          1. [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?

            1. 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.

      2. [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

        --
        Even if you are a master of jQuery, you can only create mediocre (at best)
        scripts. The problem is that the authors you rely on have not mastered the
        DOM themselves. It's like one blind guy leading another off a cliff (D.Mark/clj)
        Foren-Stylesheet Site Selfzeug JS-Lookup
        SelfCode: sh:( fo:| ch:? rl:( br:< n4:( ie:{ mo:| va:) js:| de:> zu:) fl:( ss:| ls:?
  2. 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