ERLEDIGT
JA
JA
ANTWORTEN
7
7
ZUGRIFFE
328
328
EMPFEHLEN
-
Hallo,
ich habe folgendes Problem. Ich möchte gerne Bilder via onMouseOver und onMouseOut switchen. Das klappt auch soweit.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
<script type="text/javascript"> function SwitchImage(id, image) { document.images["previews-" + id].src = "/preview/" + id + "_" + image + ".jpg"; for (var i=2; i <=4; i++) { setInterval('SwitchImage(id, i)', 2000); } } function StandardImage(id) { document.images["previews-" + id].src = "/preview/" + id + "_1.jpg"; } </script>
Dies ist die Problemzone:
Code :1 2 3 4
for (var i=2; i <=4; i++) { setInterval('ChangeImages(id, i)', 2000); }
Alle 2 Sekunden soll das Bild einer bestimmten ID gewechselt werden. Nur ist es da nicht mehr definiert. Sprich er ändert es einmal und sobald er in setInterval('ChangeImages(id, i)', 2000); reingeht, bekomme ich eine Fehlermeldung das id und i nicht definiert sein. Wieso?
Wenn ich mir die beiden Werte via alert direkt unter setInterval('ChangeImages(id, i)', 2000); ausgeben lasse, sehe ich die Werte aber. Irgendwas klappt da beim übergeben nicht.
Ich hoffe ihr könnt mir helfen.
Danke!Geändert von PHP-Fan (19.01.12 um 07:52 Uhr)
-
Gewöhnt dir ab sofort an, setInterval/Timeout keine Strings mehr, sondern anonyme Funktionen zu übergeben.
Code javascript:1 2 3 4 5 6 7
for (var i=2; i <=4; i++) { setInterval(function() { ChangeImages(id, i); }, 2000); }
Jetzt hast du aber noch folgendes Problem: die Variable "i" verändert sich, deshalb würde jetzt drei mal die Funktion aufgerufen werden mit dem Wert 4. Deshalb musst du eine weitere anonyme Funktion einsetzen, um den Wert von i zu konservieren.
Code javascript:1 2 3 4 5 6 7 8 9 10
for (var i=2; i <=4; i++) { (function(i) { setInterval(function() { ChangeImages(id, i); }, 2000); })(i); }
Edit: Um deine eigentliche Frage zu beantworten:
https://developer.mozilla.org/en/DOM...tring_literalsString literals are evaluated in the global context, so local symbols in the context where setTimeout was called will not be available when the string is evaluated as code.Geändert von CPoly (19.01.12 um 11:22 Uhr)
-
Vielen Dank für die schnelle Antwort. JavaScript-Syntax ist wirklich furchtbar. Ich habe dein Codeschnipsel ausprobiert. Leider ist da anscheinend ein Fehler drin. Jetzt passiert das in folgender Reihenfolge:
1. Wenn ich mit der Maus über das Bild fahre wird es geändert (logisch, hat ja vorher auch funktioniert)
2. Nach 2 Sekunden kommt das nächste Bild (sehr gut, hat vorher nicht funktioniert), dann bleibt er aber bei dem Bild "stecken" und der Browser stürzt dann meistens ab nach ein paar Sekunden (insbesondere wenn ich über mehrere Bilder mit der Maus fahre). Woran liegt das?
Viele Grüße
-
Um das zu beantworten muss ich wissen:
-was ist "id"
-wie sieht ChangeImages aus
-wie sieht dein Markup aus
Edit: Ich vermute dein Problem beruht auf einem Missverständnis von setInterval. Wenn du in einer Schleife drei mal setInterval aufrufst, dann wird deine Funktion drei mal alle zwei Sekunden. Du brauchst keine Schleife, sondern musst innerhalb von ChangeImages den Zähler hochsetzen.Geändert von CPoly (19.01.12 um 15:09 Uhr)
-
ID = ID des Datensatzes
Image = Bild des Datensatzes (gibt immer 1-4).
ID 400 und Bild 2 (was als erstes beim Mouseover angezeigt wird)
400_2.jpg
Als Beispiel nun ID 400, mit Bild 3, was als nächstes nach x Sekunden erscheinen soll.
400_3.jpg.
Aufgerufen wird das ganze so:
Code :1
<img src="/previews/<?php echo $aRowVideoDetails['id']; ?>_1.jpg" width="160" height="120" name="previews-<?php echo $aRowVideoDetails['id']; ?>" onMouseOver="javascript:SwitchImage(<?php echo $aRowVideoDetails['id']; ?>, 2)" onMouseOut="javascript:StandardImage(<?php echo $aRowVideoDetails['id']; ?>)"><br />
Der Code sieht komplett nun so aus:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
<script type="text/javascript"> function SwitchImage(id, image) { document.images["previews-" + id].src = "/previews/" + id + "_" + image + ".jpg"; for (var i=2; i <=4; i++) { (function(i) { setInterval(function() { SwitchImage(id, i); }, 1000); })(i); } } function StandardImage(id) { document.images["previews-" + id].src = "/previews/" + id + "_1.jpg"; } </script>
Das erste Bild wird ja immer geändert, also in die Funtion geht er auf jedenfall und die Parameter werden auch übergeben.
Danke für die Hilfe.
-
Der Hinweis sieht ganz plausibel aus. Ich habe das ganze geändert. In das:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
function SwitchImage(id, image) { document.images["previews-" + id].src = "/previews/" + id + "_" + image + ".jpg"; var i=2 if (i < 5) { (function(i) { setInterval(function() { SwitchImage(id, i); i++; }, 1000); })(i); } }
Jetzt ändert er die Bilder zwar alle, aber in Abständen von 2-3 Sekunden und irgendwann hängt er sich dann wieder auf. Wir sind nah dran aber irgendwas will da immernoch nicht.
-
Vielleicht hilft dir das weiter http://jsfiddle.net/tmDx6/
Edit: setInterval läuft unendlich und du startest immer mehr timer. Dein neuer Code würde mit setTimeout eventuell funktionieren.Geändert von CPoly (19.01.12 um 22:03 Uhr)
-
Es funktioniert. Vielen herzlichen Dank******
Ähnliche Themen
-
[Ajax] Variablen in einer Funktion global machen läuft nicht...
Von flokli im Forum Javascript & AjaxAntworten: 5Letzter Beitrag: 02.07.06, 17:38 -
Problem bei setInterval, mit Variablen für die Zeit
Von PatrickStr im Forum Flash PlattformAntworten: 3Letzter Beitrag: 22.03.06, 21:09 -
Übergibt nicht alle Variablen !
Von Stuntman im Forum PHPAntworten: 1Letzter Beitrag: 07.01.05, 22:18 -
Server übergibt keine Variablen
Von Katzenbauer im Forum PHPAntworten: 4Letzter Beitrag: 01.11.04, 12:17 -
<form> übergibt Variablen der Eingabefelder nicht
Von Johnnii360 im Forum Javascript & AjaxAntworten: 12Letzter Beitrag: 13.09.04, 20:35





Zitieren


Login





