Aktualisierung steuern mit DropDown
Henner
- javascript
0 Markus Speicherl
Hi,
ich habe eine Seite, die sich unter Verwendung alle 120 Sekunden aktualisiert. Der Code sieht so aus...
<head>
...
<script type="text/javascript">
<!--
tickzeit=120;//Anzahl Sekunden
fNull=1;//wenn Sekunden kleiner 10 => führende '0' anzeigen; um diese nicht anzuzeigen, Wert auf 0 setzen
zaehler=tickzeit;
function tick(){
n=zaehler<10&&fNull?'0'+zaehler:zaehler;
document.getElementById('ticker').innerHTML=n;
zaehler--;
if(zaehler>=0)setTimeout('tick()',1000);
else location.reload();
}
//-->
</script>
...
</head>
und dann
...
<body onload="tick()">
...
Ich hätte gerne die Möglichkeit, die Zeit per Drop-Down zu ändern, so dass der User Optionen hat. Z.B. 30 Sekunden, 60 Sekunden, 90 Sekunden.
Mein Problem: Ich kann überhaupt kein JS und weiß nicht, wie ich anfangen soll. Kann mir jemand konkret helfen?
Besten Dank und beste Grüße!
Das ist jetzt schon aber ein bisschen dreist oder?
Hast du es wenigstens selber versucht rauszufinden?
Naja, ich will mal nicht so sein:
Addiere eine weitere Funktion und sage der Funktion dass sie deine Global definierte variabel neu setzen soll:
function settick(ticks){
tickzeit=ticks;
}
Versuche wenigstens das nachzuvollziehen was ich damit bewirkt habe: Wir haben eine Funktion erstellt, die hingeht und aus deiner gesetzen Variabel tickzeit=120 einfach tickzeit=ÜBERGEBENER_WERT macht.
Danach musst du noch dein Formelement bearbeiten:
<select name="name" onchange="settick(this.value);">
<option value="60">1 Minute</option>
<option value="120">2 Minuten</option>
<option value="300">5 Minuten</option>
<option value="63113852">Alle 2 Jahre</option>
</select>
Was haben wir hier getan? Interessiert dich warscheinlich nicht, ich sags dir aber trotzdem:
Wir haben dem FormElement gesagt, dass es bei einer Veränderung (onChange) doch bitte die Funktion aufruft mit der wir die neue Zeit setzen ( settick() ) und ihm auch den ausgewählten Wert (value) übergeben den DIESES (this) Formelement bekommen hat als wird mittels dropdown es veränderten (this.value)
Und hör mal, das schreib ich hier mit nem dicken Kopf nachdem ich von ner Fete komm. Dann wirst du das wohl auch schaffen, mh?
grüsse+nacht
function settick(ticks){
tickzeit=ticks;
}
ist wohl der Fete oder dem unübersichtlichen Quellcode geschuldet, aber um etwas zu bewirken müsstest du zaehler bearbeiten, also
function settick(ticks){
zaehler=ticks;
}
tickzeit wird ja nur einmal ausgelesen und dann nie wieder benutzt während zaehler runtergezählt wird.
Was hier übrigens noch fehlt ist eine Übergabe der ticks an die neu geladene Seite, zB. über location.search
Danke an Euch beide!
Vielleicht mag es etwas dreist sein, aber was will ich machen, wenn ich kein JS kann (und es in meinem Ermessen nach dieser Sache auch nicht mehr brauche)?
Ich habe schon versucht, mich damit auseinander zu setzen, aber mir fehlen die passenden Schlagwörter. Wenns dazu nen Codeschnipsel oder ne Anleitung geben würde (wenn die einer hat, Link her und gut ist), wäre ich auch froh, hier keinen nerven zu müssen.
Genug der Rechtfertigung: Was ist denn jetzt falsch an der ersten Version? Ich weiß nur, dass sie bei mir nicht funktioniert hat.
Danke!
Genug der Rechtfertigung: Was ist denn jetzt falsch an der ersten Version? Ich weiß nur, dass sie bei mir nicht funktioniert hat.
Das ist nun wirklich alles andere als eine sinnvolle Fehlerbeschreibung. Was hast du konkret gemacht, was ist passiert, was sagt die Fehlerkonsole des Firefox (im Menü EXTRA), hast du alle Postings hier gelesen?
Das ist nun wirklich alles andere als eine sinnvolle Fehlerbeschreibung.
Das ist wohl war.
Was hast du konkret gemacht, was ist passiert, was sagt die Fehlerkonsole des Firefox (im Menü EXTRA), hast du alle Postings hier gelesen?
Ich habs bisher nur im IE getestet. Ich habe zwar auch Opera und FF, bin aber aus Gewohnheit immer am IE hängen geblieben. Ich habe mich in erster Linie auf das erste Posting verlassen,
function settick(ticks){
tickzeit=ticks;
}
in den <head> eingebaut (was ich nachher durch Deinen Code ausgebessert habe) und
<select name="name" onchange="settick(this.value);">
<option value="60">1 Minute</option>
<option value="120">2 Minuten</option>
<option value="300">5 Minuten</option>
<option value="63113852">Alle 2 Jahre</option>
</select>
in "form" gebracht.
Dann habe ich mir die Infos zu location.search durchgelesen. Da hörts aber bei mir auf: Ich kann die Alert-Sache nachvollziehen (sieht man am Bsp ja ganz gut), aber wie ich das dann auf "meinen Fall" anwenden soll..??
So jetzt bin ich auch wieder wach =)
Gast42 hat natürlich recht. tickzeit ist eine konstant gesetzter Wert der nur einmal gelesen wird, folglich muss ich also richtig heissen:
function settick(ticks){
zaehler=ticks;
tickzeit=ticks;
}
Die tickzeit=ticks; setzen wir damit wir es später in der übergabe verwenden können; Denn ja, auch eine übergabe der tickzeit an die neue geladene Seite ist sinnvoll da man sonst nach jedem refresh ja neu auswählen muss wann das nächste mal refresht werden soll.
Deswegen:
location.replace('Untitled-1.html?'+tickzeit);
Dies ist etwas unsauber aber da ich nicht annehme, dass du noch mehr Werte übertragen wirst ist es machbar.
Und letzlich, da ich weiss, dass du eh nur ein copy/paste des Codes vor hast ohne es genauer unter die Lupe zu nehmen:
<script type="text/javascript">
<!--
tickzeit=60;//Anzahl Sekunden
fNull=1;//wenn Sekunden kleiner 10 => führende '0' anzeigen; um diese nicht anzuzeigen, Wert auf 0 setzen
gettick=location.search.substring(1);
zaehler=gettick!=""?parseInt(gettick):tickzeit;
function settick(ticks){
zaehler=ticks;
tickzeit=ticks;
}
function tick(){
n=zaehler<10&&fNull?'0'+zaehler:zaehler;
document.getElementById('ticker').innerHTML=n;
zaehler--;
if(zaehler>=0)setTimeout('tick()',1000);
else location.replace('Untitled-1.html?'+tickzeit);
}
function setform() {
if(gettick!=""){
for (i = 0; i < document.Form1.Field1.length; ++i)
if (document.Form1.Field1.options[i].value == gettick)
document.Form1.Field1.options[i].selected = true;
}
}
//-->
</script>
<body onload="tick();setform();">
<a href="#" id="ticker">--</a> Sekunden<br />
<form name="Form1" action="">
<select name="Field1" onchange="settick(this.value);">
<option value="10">1 Minute</option>
<option value="20">2 Minuten</option>
<option value="300">5 Minuten</option>
<option value="63113852">Alle 2 Jahre</option>
</select>
</form>
Anmerkung: Vielelicht packt dich ja doch noch der ergeiz dich damit zu beschäftigen da es sicherlich nicht ratsam ist die Refreshzeit in Sekunden anzugeben wenn es länger als 5 Minuten dauert... Aber das ist einfache Geteilt-Rechnung mit einer IF-Abfrage. Das schaffst du hoffentlich.
grüsse