Zufallsgenerator für neues fenster?
Marcel
- javascript
1
globe
0 Mathias Brodala
Ich habe diesen Script entworfen
---------------------------------------------------------------------
<script language="javascript">
var zuzahl = "";
zuzahl = math.random();
var c1 = "";
var c2 = "";
var c3 = "";
var c4 = "";
var c5 = "";
c1 >= 0 && c1 < 0.2;
c2 >= 0.2 && c2 < 0.4;
c3 >= 0.4 && c3 < 0.6;
c4 >= 0.6 && c4 < 0.8;
c5 >= 0.8 && c5 <= 1;
function zufall() {
switch (zuzahl) {
case c1:
window.open("bilder.htm","Zufallsfenster1");
break;
case c2:
window.open("video.htm","Zufallsfenster2");
break;
case c3:
window.open("kontakt.htm","Zufallsfenster3");
break;
case c4:
window.open("witze.htm","Zufallsfenster4");
break;
case c5:
window.open("links.htm","Zufallsfenter5");
break;
}
}
</script>
---------------------------------------------------------------------
der klappt aber nicht! Wisst ihr was ich falsch gemacht hab?
n'abend,
wenn du in Zukunft bitte mehr Informationen liefern könntest, würde uns das die Arbeit sehr vereinfachen. Den "hingerotzten Kot" zu analysieren, ohne auch nur einen einzigen Anhaltspunkt zu haben, was denn passieren soll und was eben nicht passiert, ist reichlich nervig. Folgendes reicht i.d.R. aus:
(a) was soll passieren, was macht das programm
(b) was passiert, was geht schief, wo liegt das Problem, Fehlermeldung, Fehlermeldung, Fehlermeldung.
<script language="javascript">
var zuzahl = "";
zuzahl = math.random();
Warum initialisierst du zuzahl zuerst als String (Zeichenkette) und weist ihm dann eine (zufällige) Kommazahl zu? Das folgende ist vollkommen ausreichend:
var zuzahl = Math.random();
var c1 = "";
var c2 = "";
var c3 = "";
var c4 = "";
var c5 = "";
c1 >= 0 && c1 < 0.2;
c2 >= 0.2 && c2 < 0.4;
c3 >= 0.4 && c3 < 0.6;
c4 >= 0.6 && c4 < 0.8;
c5 >= 0.8 && c5 <= 1;
Eingangs habe ich von Informationen gesprochen; hier wäre es nett zu wissen, was du mit diesen Zeilen beabsichtigst. Du wirst kaum eine leere Zeichenkette auf eine Kommazahl prüfen wollen, oder?
Deine Prüfungen ergeben (zudem, dass sie falsch sind) nichts. Du weist die Ergebnisse der Prüfung keiner Variablen zu (z.B. var ergebnis = c5 >= 0.8 && c5 <= 1;) und du handelst nicht entsprechend des Ergebnisses (z.B. if(c5 >= 0.8 && c5 <= 1;) alert('hallo');).
function zufall() {
switch (zuzahl) {
case c1:
hier passiert in Worten folgendes:
Wenn zuzahl gleich c1, dann öffne Fenster.
Wenn 0.123 gleich "", dann öffne Fenster.
[snipp]
der klappt aber nicht! Wisst ihr was ich falsch gemacht hab?
Siehe meine Kommentare oben. Anmerken möchte ich, dass hier (wegen der Bereichsprüfung (Range)) ein Switch vielleicht nicht gerade die beste Wahl war. Eine "else-if-Kette" wäre hier evtl. das bessere Mittel.
weiterhin schönen abend...
Hallo Marcel.
Ich habe diesen Script entworfen
Daran ist aber noch einiges verbesserungswürdig. Unter anderem auch an deiner Fehlerbeschreibung: was passiert und was hattest du erwartet?
<script language="javascript">
Auf das language-Attribut kannst du verzichten, auf das type-Attribut nebst passendem MIME-Typen jedoch nicht.
var zuzahl = "";
zuzahl = math.random();
Dies ginge kürzer:
`var zuzahl = Math.random();`{:.language-javascript}
Zudem gibt es kein vordefiniertes Objekt „math“, doch ein „Math“; JS ist case-sensitive.
> ~~~javascript
c1 >= 0 && c1 < 0.2;
> c2 >= 0.2 && c2 < 0.4;
> c3 >= 0.4 && c3 < 0.6;
> c4 >= 0.6 && c4 < 0.8;
> c5 >= 0.8 && c5 <= 1;
Was sollen diese Ausdrücke denn deiner Meinung nach bewirken? Sie wären höchstens als überprüfender Ausdruck in einer Verzweigung (if/else) oder einer Schleife sinnvoll.
function zufall() {
switch (zuzahl) {
Zugriffe auf globale Variablen zeugen nicht gerade von sauberem Stil. Übergib „zuzahl“ doch beim Aufruf der Funktion „zufall“ als Argument:
~~~javascript
function zufall(zuzahl) { /* … */ }
zufall(Math.random());
case c1:
Auch hier wieder ein unsauberer globaler Zugriff. Zudem wird niemals einer der Fälle eintreffen, da in allen c*-Variablen nach wie vor nur ein Leerstring steht. Und das Resultat von Math.random() wird niemals ein Leerstring sein.
Zudem ist dein (augenscheinliches) Vorhaben nicht per switch-Konstrukt umsetzbar, da dieses nur überprüft, ob der Wert des im Kopf des switch-Konstruktes angegebenen Ausdruckes mit einem der Cases übereinstimmt. Dieser Unterschied wird auch in der Doku sichtbar:
[link:http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Conditional_Statements#if...else_Statement@title=if] (condition)
statement_1
[else
statement_2]
Hier kannst du eine „condition“, also eine Bedingung angeben;
[link:http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Conditional_Statements#switch_Statement@title=switch] (expression) {
case label_1:
statements_1
[break;]
case label_2:
statements_2
[break;]
...
default:
statements_def
[break;]
}
Hier kannst du weder im Kopf noch bei den Labels „conditions“, also Bedingungen angeben.
Du wirst also wohl nicht um if und else if umhin kommen.
der klappt aber nicht! Wisst ihr was ich falsch gemacht hab?
Noch ein Tipp: die (JavaScript|Fehler)-Konsole von Browsern™ (Firefox, Opera, …) ist in solchen Fehlerfällen stets sehr auskunftsfreudig.
Einen schönen Donnerstag noch.
Gruß, Mathias