ralphi: Jquery und setTimeout - kann das funktionieren?

Hi zusammen,

eigentlich ne Anfängerfrage.

warum greift das Intervall in msec nicht?

Im Zusammenspiel mit JQuery hab ich setTimeout noch nicht eingesetzt.

Ich habe 5 Bilder und möchte sie nacheinander mit fadeeffekt einblenden. Die Funktion rast einfach durch, egal welchen Wert ich als intervall angebe.

  
  
                $('#garten2').hide();  
		$('#garten3').hide();  
		$('#garten4').hide();  
		$('#garten5').hide();  
var x=1;  
		function Bilderschleife ( bild1,bild2) {  
		  
			$(bild1).fadeOut(500);  
			$(bild2).fadeIn(500);  
			  
			x++;  
			if (x >= 6) {x=1;}  
			bild1="#garten"+x;  
			bild2="#garten"+(x+1);  
		  
			setTimeout(Bilderschleife( bild1,bild2),10000);  
			  
		}  
		Bilderschleife(1, "#garten1","#garten2");

Was mach ich falsch?

Viele Grüße aus LA

--
ralphi
  1. Hallo,

    setTimeout(Bilderschleife( bild1,bild2),10000);

    setTimeout erwartet eine Funktion (ein Funktionsobjekt).

    Hier übergibst du setTimeout allerdings den Rückgabe des Funktionsaufrufs Bilderschleife(…). Das ist allem anscheind nach undefined (die Funktion hat keinen Rückgabewert).

    Hier wird also letztlich setTimeout(undefined, 10000); ausgeführt – das hat natürlich keine Wirkung.

    Entweder kannst du eine anonyme Funktion übergeben:

    setTimeout(function() {  
      Bilderschleife(bild1, bild2);  
    }, 10000);
    

    Oder du erzeugst eine neue Funktion mit Function#bind(), die das Original mit vordefinierten Parametern aufruft:

    setTimeout(Bilderschleife.bind(undefined, bild1, bild2), 10000);

    Das geht in neueren Browsern (ECMAScript 5) und das Konzept nennt sich Currying in der funktionalen Programmierung.

    Mathias

    1. Meine Herren,

      Ergänzend: Der initiale Funktionsaufruf bekommt falsche Argumente übergeben:

      Bilderschleife(1, "#garten1","#garten2");

      sollte glaube ich sein:

      Bilderschleife("#garten1","#garten2");

      --
      Hey Girl,
      i wish you were asynchronous, so you'd give me a callback.
      1. hi,

        Ergänzend: Der initiale Funktionsaufruf bekommt falsche Argumente übergeben:

        durch die rumprobiererei - auch das mit dem x ist so nicht ganz korrekt (schließt so am ende das letzte bild nicht)
        aber jetzt läufts - danke

        Viele Grüße aus LA

        --
        ralphi
    2. Hi Mathias

      Entweder kannst du eine anonyme Funktion übergeben:

      setTimeout(function() {

      Bilderschleife(bild1, bild2);
      }, 10000);

      
      >   
      
      funktioniert - danke  
        
      wenn ich dich richtig verstehe, muss die function irgendeinen return haben - wieder was gelernt ;-)  
        
      Viele Grüße aus LA
      
      -- 
      ralphi
      
      1. Hallo,

        wenn ich dich richtig verstehe, muss die function irgendeinen return haben - wieder was gelernt ;-)

        nein, diese Erkenntnis ist so nicht richtig. Eine Funktion darf gern ohne ein Funktionsergebnis enden. Aber wenn ein Funktionsaufruf in einem Ausdruck enthalten ist, dann wird an der Stelle das Funktionsergebnis weiterverarbeitet. Wenn die Funktion keins liefert, ist das dumm.

        Aber auch wenn es rein von der Programmlogik her nicht erforderlich ist, dass eine Funktion noch ein Ergebnis zurückliefert, gilt es als guter Stil, das trotzdem zu tun. Und sei es ein boolsches Ergebnis oder ein Fehlercode, der den Aufrufer über Erfolg oder Misserfolg informiert.
        Man kann das Funktionsergebnis ja dann immer noch ignorieren, wenn man meint, man bräuchte es nicht.

        Ciao,
         Martin

        --
        Wer mit dem Finger droht, sollte ihn am Abzug haben, und nicht in der Nase.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Hi,

          Aber auch wenn es rein von der Programmlogik her nicht erforderlich ist, dass eine Funktion noch ein Ergebnis zurückliefert, gilt es als guter Stil, das trotzdem zu tun. Und sei es ein boolsches Ergebnis oder ein Fehlercode, der den Aufrufer über Erfolg oder Misserfolg informiert.
          Man kann das Funktionsergebnis ja dann immer noch ignorieren, wenn man meint, man bräuchte es nicht.

          stimmt - ich hab eigentlich immer funktionen, mit prozeduren (vb6) verwechselt. wenn man sich halt alles selber aneignet .. ;-)
          Viele Grüße aus LA

          --
          ralphi