JS - warum der error ?
Fabian Mürmann
HI !
ich habe folgendes JS geschrieben:
function slide()
{
alert
if (bar.style.color = "white")
{
bar.style.color = "blue"
setTimeout("slide()",1000)
}
else
{
bar.style.color = "white"
setTimeout("slide()",1000)
}
}
ich habe eien div tag wie folgt:
<div id="bar" style="color: white">text</div>
das JS ändert die farbe nach dem ersten lauf auf blau, dann aber nicht mehr auf weiss. warum ?
Fabian
Hallo Fabian
function slide()
»» {
»»
»» alert
if (bar.style.color = "white")
{
bar.style.color = "blue"
setTimeout("slide()",1000)
}
else
{
bar.style.color = "white"
setTimeout("slide()",1000)
}
»»
»» }
<div id="bar" style="color: white">text</div>
das JS ändert die farbe nach dem ersten lauf auf blau, dann aber nicht mehr auf weiss. warum ?
Das "alert" ist hoffentlich nur hier reingerutscht? Und das einfache "=" in der if-Bedingung?
Das Problem hatte ich auch schon mal. Ich weiss jetzt nicht mehr genau was es war, aber moeglicherweise ist das "else" in diesem Fall zu unbestimmt. Probier mal:
if (bar.style.color == "white")
{
bar.style.color = "blue";
setTimeout("slide()",1000);
}
if (bar.style.color == "blue")
{
bar.style.color = "white";
setTimeout("slide()",1000);
}
viele Gruesse
Stefan Muenz
Hi !
Das "alert" ist hoffentlich nur hier reingerutscht? Und das einfache "=" in der if-Bedingung?
das alert ist ein fehler. ich hab da nur eine ausgabe der aktuellen color gemacht und vergessen es ganz zu löschen.
ups. naja das mit dem "=" liegt wohl daran, das ich um 2 uhtr nachts nicht mehr klar denken kann ! (da hab ich das script geschrieben)
Das Problem hatte ich auch schon mal. Ich weiss jetzt nicht mehr genau was es war, aber moeglicherweise ist das "else" in diesem Fall zu unbestimmt. Probier mal:
mach ich ! danke !
greets
- Fabian
HI again !
mein skript sieht jetzt so aus :
function slide()
{
if (bar.style.color == "white")
{
bar.style.color = "blue";
setTimeout("slide()",1000);
}
if (bar.style.color == "blue")
{
bar.style.color = "white";
setTimeout("slide()",1000);
}
}
schön und gut. die farbe wird einmal geändert, dann wird der browser (ie4) immer lahmer und hängt nach ca. 1 minute. es scheint, als ob sich irgendwie eine rechenintensive schleife gebildete hat. das kann ich mir aber nicht erklären !
Fabian
Hi!
schön und gut. die farbe wird einmal geändert, dann wird der browser (ie4) immer lahmer und hängt nach ca. 1 minute. es scheint, als ob sich irgendwie eine rechenintensive schleife gebildete hat. das kann ich mir aber nicht erklären !
Sehr seltsam...
Vielleicht hilft ein "clearTimeout(timerID)", beim setTimeout muß dann halt die ID gemerkt werden (timerID=setTimeout(...)). Halte ich aber eher für unwahrscheinlich...
Wie startest Du denn das Script? Ein erster "setTimeout()"... fehlt mir hier...
Ciao,
Mirko
HI !
ich starte das script im onload des body tags.
Fabian
HI !
ich starte das script im onload des body tags.
Hm... das schließt dann imho wohl einen wiederholten Aufruf aus...
Schreib' doch mal, wo die Seite zu finden ist. Vielleicht macht's ja wenigstens der 5er Explorer richtig... oder es ist irgendwo anders was faul...
Apropos: Alle IE5-Freaks sollten mal auf http://www.microsoft.com/windows/Ie/WebAccess/default.ASP schauen... :)
Ciao,
Mirko
Hm... das schließt dann imho wohl einen wiederholten Aufruf aus...
eben !
Schreib' doch mal, wo die Seite zu finden ist. Vielleicht macht's ja wenigstens der 5er Explorer richtig... oder es ist irgendwo anders was faul...
noch gibts die page nirgendwo. nur auf meinem pc. da läuft ie4, ie5 und ns 4.5. bei keinem klappts
Ciau
Fabian
noch gibts die page nirgendwo. nur auf meinem pc.
Mail' sie mir halt mal zu...
da läuft ie4, ie5 und ns 4.5. bei keinem klappts
Bei Netscape ist das klar (der kennt halt kein DHTML, das den Namen verdient)...
Ciao,
Mirko
Hier des Rätsels Lösung:
Zunächst wurde die Farbe auf weiß gesetzt und ein setTimeout() gemacht.
Dadurch wurde die zweite Bedingung erfüllt (umpf... hätte mensch ja auch gleich sehen können... ;)), und die Farbe sofort wieder auf blau gesetzt und noch ein TimeOut gesetzt, obwohl das erste noch nicht eintraf.
Das heißt, mit jedem slide()-Aufruf wurden zwei(!) neue erzeugt, was sich dann exponential zur Katastrophe entwickelte... Ein Glück das der IE5.0 besser von der Windows-Shell getrennt ist... :)
Also, bitte diese Variante verwenden:
function slide()
{
if (bar.style.color == "white")
{
bar.style.color = "blue";
} else {
bar.style.color = "white";
}
setTimeout("slide()",1000);
}
Prinzipiell sollte man sich merken: setTimeouts sollte man wenn möglich nur einmal pro Funktion, oder notfalls in einer if-else-Struktur verwenden...
Ciao,
Mirko
H I!
jo, da hat man den wald vor lauter bäumen ned gesehen !
naja was solls !
Fabian
Hallo Fabian
schön und gut. die farbe wird einmal geändert, dann wird der browser (ie4) immer lahmer und hängt nach ca. 1 minute. es scheint, als ob sich irgendwie eine rechenintensive schleife gebildete hat. das kann ich mir aber nicht erklären !
Wie reagiert der MSIE4 denn bei <../../tfbaa.htm>? (Netscape ist bei diesem Beispiel zwecklos) Wenn Du dort auf "so wird's gemacht" klickst, findest Du ein Script, das genau Deine Funktionsweise hat.
viele Gruesse
Stefan Muenz
HI !
DANKE !
das klappt !
Fabian
HI !
DANKE !
das klappt !
Fabian
function slide()
»» {
»»
»» alert
if (bar.style.color = "white")
{
bar.style.color = "blue"
setTimeout("slide()",1000)
}
else
{
bar.style.color = "white"
setTimeout("slide()",1000)
}
»»
»» }
Hallo Fabian,
Ich weiss nicht, ob Dein Rechner nur bei COPY & PASTE geschludert hat, oder ob das "alert" tatsaechlich so einsam dasteht.
Ich hab deswegen extra nochmal unter <../../tecb.htm#a18> nachgeschaut und da steht alert(). Vielleicht ist das schon die Ursache.
Michael N.
HI !
mit dem alert das ist mein fehler. der ist schon draussen.
Fabian