Schmidt: setTimeout wird nicht ausgführt

Hey Leute!
Also ich habe folgenden Code (ist eine Beispielfunktion zum einfachen Verständnis). Die Funktion sollte bei Aufruf mit steps = 0 von 100 bis 1 zählen und dieser Vorgang sollte 99 Sekunden dauern.

  
	function fadeOut( iid, bh, steps)  
	{  
		if( steps == 0 ) { steps = 100; }  
		  
		if( steps > 1)  
		{  
			steps--;  
			setTimeout(function(){fadeOut(iid, bh, steps);},1000);  
			  
		}	  
	}  

Das Problem an der ganzen Sache ist einfach, dass die Funktion nur einmal aufgerufen wird. Das setTimeout spricht einfach nicht an. Was mich irre macht ist, dass die Funktion genau so mal funktioniert hat und auch kein Fehler ausgegeben wird. Hat jemand eine Idee, weshalb setTimeout übergangen werden könnte?

Ich hab es auch schon so versucht:

			toDo = 'fadeOut("'+ iid +'", '+ bh +', '+ steps +')';  
			window.setTimeout(toDo, 100);

Danke!

  1. Hey Leute!
    Also ich habe folgenden Code (ist eine Beispielfunktion zum einfachen Verständnis). Die Funktion sollte bei Aufruf mit steps = 0 von 100 bis 1 zählen und dieser Vorgang sollte 99 Sekunden dauern.

    function fadeOut( iid, bh, steps)
    {
    if( steps == 0 ) { steps = 100; }

      if( steps > 1)  
      {  
      	steps--;  
      	setTimeout(function(){fadeOut(iid, bh, steps);},1000);  
      	  
      }	  
    

    }

    
    >   
    > Das Problem an der ganzen Sache ist einfach, dass die Funktion nur einmal aufgerufen wird. Das setTimeout spricht einfach nicht an.  
      
    Wenn du sowieso schon ein closure benutzt, wäre es eleganter hier auch ein's für den Timer zu bauen, das spart auch die Parameter. Allerdings weiß ich nicht, was die Parameter machen.  
      
      
    
    > Ich hab es auch schon so versucht:  
    > ~~~javascript
    
    			toDo = 'fadeOut("'+ iid +'", '+ bh +', '+ steps +')';  
    
    > 			window.setTimeout(toDo, 100);
    
    

    Js das ist ein Versuch. Nur darfst du hier keinen String verwenden, sondern musst auch eine Funktionsreferenz nehmen, wie in deinem obigen Beispiel. In etwa so

      
    function fadeOut( iid, bh, steps) {  
    	if(steps == 0) steps = 100;  
    	var todo = function() {  
    		steps--;  
    		if(steps > 1)  setTimeout(todo ,1000);  
    	}  
    	todo();  
    }  
    
    

    Struppi.

    1. Hey Struppi,

      habe gerade deine Version eingebaut, jedoch wird die Funktion wieder nicht aufgerufen.

      Nun habe ich schon drei Varianten, wie ich das theoretisch machen könnte, jedoch funktioniert keine davon. Woran könnte es liegen?

      1. habe gerade deine Version eingebaut, jedoch wird die Funktion wieder nicht aufgerufen.

        Das stimmt nicht, mein Beispiel funktioniert. du kennst die Fehlerkonsole?

        Struppi.

        1. Das stimmt nicht, mein Beispiel funktioniert. du kennst die Fehlerkonsole?

          Ja natürlich, nur gibt diese wie gesagt nichts aus. Als würde der Befehl nicht existieren. Genau das Gleiche passiert auch in einer anderen Funktion mit setTimeout-Aufruf: Nichts.

          Und wie gesagt: Das Ganze hat bereits funktioniert. Deswegen müsste es etwas externes sein. Wie kann etwas externes irgendwo im Javascript dazu führen, dass der Aufruf nicht ausgeführt wird? Ich habe keine Funktion mit gleichem Namen angelegt...

          1. Das stimmt nicht, mein Beispiel funktioniert. du kennst die Fehlerkonsole?

            Ja natürlich, nur gibt diese wie gesagt nichts aus. Als würde der Befehl nicht existieren. Genau das Gleiche passiert auch in einer anderen Funktion mit setTimeout-Aufruf: Nichts.

            fadeOut(null, null, 0);  
            function fadeOut( iid, bh, steps) {  
                    if(steps == 0) steps = 10;  
                    var todo = function() {  
                            steps--;  
            				window.status = steps;  
                            if(steps > 1)  setTimeout(todo ,1000);  
                    }  
                    todo();  
            }  
            
            

            So, funktioniert einwandfrei und jetzt?

            Struppi.

            1. Ich frage doch garnicht danach, was am Aufruf nicht funktioniert sondern nach äußeren Umständen, unter welchen die Aufrufarten lahmgelegt werden könnten. Würde ich zum Beispiel eine Funktion setTimeout nennen, wäre es für mich einleuchtend wenn es nicht geht - habe ich aber nicht getan.

              1. Ich frage doch garnicht danach, was am Aufruf nicht funktioniert sondern nach äußeren Umständen, unter welchen die Aufrufarten lahmgelegt werden könnten.

                Das können unendlich viele sein, warum willst du uns unbedingt raten lassen, anstatt konkret zu werden?

                Aber die Fehlerkonsole kennst du?

                Struppi.

                1. Das können unendlich viele sein, warum willst du uns unbedingt raten lassen, anstatt konkret zu werden?

                  Naja, ich dachte, vielleicht gibt es bekannte Probleme, wenn man etwas bestimmtes im Code macht, das setTimeout übergangen wird (wie beim Beispiel mit der Funktion gleichen Namens).

                  Aber die Fehlerkonsole kennst du?

                  Wie bereits beantwortet: Ja! ;) Gibt nicht's aus!

                2. Habe gerade mal folgendes in meinen Code eingebaut:

                  	function setTimeout(q,w)  
                  	{	  
                  		eval(q);  
                  	}
                  

                  Nun funktioniert alles korrekt, jedoch wird das ganze nicht verzögert, was der Inhalt von setTimeout ist. Die Funktion wird also korrekt aufgerufen. Mir ist es wirklich schleierhaft was in setTimeout los ist. Kann man irgendwie mit Firebug oder Ähnlichem in die Funktion hineinsehen?

                  1. Habe gerade mal folgendes in meinen Code eingebaut:

                    function setTimeout(q,w)  
                    

                    {
                    eval(q);
                    }

                    
                    >   
                      
                    Das darfst du natürlich nicht machen. So überschreibst du die Funktion window.setTimeout()  
                      
                    Struppi.
                    
                    1. Das darfst du natürlich nicht machen. So überschreibst du die Funktion window.setTimeout()

                      War ja auch nur zum testen. Wie ich vorher geschrieben habe, ist im regulären Code sowas nicht.

                      1. Das darfst du natürlich nicht machen. So überschreibst du die Funktion window.setTimeout()

                        War ja auch nur zum testen. Wie ich vorher geschrieben habe, ist im regulären Code sowas nicht.

                        Und das Problem ist gelöst?

                        Struppi.

                        1. Nein, leider nicht, weil die richtige setTimeout-Funktion immernoch nicht richtig funktioniert.

                          1. Nein, leider nicht, weil die richtige setTimeout-Funktion immernoch nicht richtig funktioniert.

                            Warum zeigst du sie uns dann nicht einfach mal?

                            Struppi.

                            1. @@Struppi:

                              nuqneH

                              Nein, leider nicht, weil die richtige setTimeout-Funktion immernoch nicht richtig funktioniert.

                              @Schmidt: „Funktioniert immer noch nicht richtig“ funktioniert immer noch nicht richtig.

                              Warum zeigst du sie uns dann nicht einfach mal?

                              @Struppi: Ich bewundere deine Geduld.

                              Qapla'

                              --
                              Volumen einer Pizza mit Radius z und Dicke a: pi z z a
              2. Ich frage doch garnicht danach, was am Aufruf nicht funktioniert sondern nach äußeren Umständen, unter welchen die Aufrufarten lahmgelegt werden könnten. Würde ich zum Beispiel eine Funktion setTimeout nennen, wäre es für mich einleuchtend wenn es nicht geht - habe ich aber nicht getan.

                Ach so - und noch eine Ergänzung. Die aussage aus deinem Ursprungsposting ist so nicht nachvollziehbar, wie auch mein Beispiel zeigt, insofern läßt sich diese Frage auch nicht beantworten, da deine Analyse falsch ist.

                Struppi.

                1. Ach so - und noch eine Ergänzung. Die aussage aus deinem Ursprungsposting ist so nicht nachvollziehbar, wie auch mein Beispiel zeigt, insofern läßt sich diese Frage auch nicht beantworten, da deine Analyse falsch ist.

                  Zitat: Das setTimeout spricht einfach nicht an. Was mich irre macht ist, dass die Funktion genau so mal funktioniert hat und auch kein Fehler ausgegeben wird. Hat jemand eine Idee, weshalb setTimeout übergangen werden könnte?

                  Was ist daran nicht nachvollziehbar? Die Funktion hat so bereits funktioniert, nun aber leider nicht mehr. Heißt, der Code muss korrekt sein, aber etwas anderes hat sich geändert. Hat nicht's mit falsch zu tun...

                  1. Ach so - und noch eine Ergänzung. Die aussage aus deinem Ursprungsposting ist so nicht nachvollziehbar, wie auch mein Beispiel zeigt, insofern läßt sich diese Frage auch nicht beantworten, da deine Analyse falsch ist.

                    Zitat: Das setTimeout spricht einfach nicht an. Was mich irre macht ist, dass die Funktion genau so mal funktioniert hat und auch kein Fehler ausgegeben wird. Hat jemand eine Idee, weshalb setTimeout übergangen werden könnte?

                    Was ist daran nicht nachvollziehbar? Die Funktion hat so bereits funktioniert, nun aber leider nicht mehr. Heißt, der Code muss korrekt sein, aber etwas anderes hat sich geändert. Hat nicht's mit falsch zu tun...

                    Sondern?

                    tut mir leid, ich kann dir aber an dieser stelle nicht mehr weiterhelfen. Ich hab dir ein funktionsfähiges Beispiel gezeigt, dass genau das macht was du hier dir wünscht. Eine Schleife mit einem setTimeout.

                    Wenn das bei dir anders ist und nicht funktioniert, dann sind deine Rahmenbedingungen andere, aber die kennen wir nicht.

                    Struppi.

                    1. tut mir leid, ich kann dir aber an dieser stelle nicht mehr weiterhelfen. Ich hab dir ein funktionsfähiges Beispiel gezeigt, dass genau das macht was du hier dir wünscht. Eine Schleife mit einem setTimeout.

                      Wenn das bei dir anders ist und nicht funktioniert, dann sind deine Rahmenbedingungen andere, aber die kennen wir nicht.

                      Vielen Dank für deine Mühen! :)