2 Funktionen -> selbe Ausgabe .. warum?
martinwh
- javascript
Liebe Community,
in meiner Seite sind 2 Funktionsaufrufe von 2 verschiedenen Javascripts eingefügt.
Die erste Funktion liegt in der Datei dvds.js und heißt rndDVD() - die 2. in games.js mit dem namen rndGame()
In meiner Seite wird jedoch zweimal die Funktion rndDVD() ausgeführt, obwohl nur 1x aufgerufen. Kann mir da jemand weiter helfen?
Am Anfang glaubte ich es läge daran, dass beide scripts die selben variablennamen verwenden, aber selbst nach änderung besteht das Problem weiterhin.
Hier der Link zur pre: http://freenet-homepage.de/cjonas666/testpage/
liebe Grüße,
Martin
in meiner Seite sind 2 Funktionsaufrufe von 2 verschiedenen Javascripts eingefügt.
Die erste Funktion liegt in der Datei dvds.js und heißt rndDVD() - die 2. in games.js mit dem namen rndGame()
In meiner Seite wird jedoch zweimal die Funktion rndDVD() ausgeführt, obwohl nur 1x aufgerufen. Kann mir da jemand weiter helfen?
Woran merkt man das?
Und wie werden deine Funktionen aufgerufen?
Struppi.
Woran merkt man das?
Und wie werden deine Funktionen aufgerufen?Struppi.
daran dass in der box "dvd releases" und in der box "game releases" immer ein identischer inhalt angezeigt wird.
die funktionen werden mit <script type="text/javascript" language="JavaScript">rndDVD();</script>
und <script type="text/javascript" language="JavaScript">rndGame();</script>
aufgerufen.
Diesen Fehler kann ich hier im Firefox nicht nachvollziehen.
Allerdings sehe ich Deine "Zufallszahlgenerierung" doch etwas skeptisch... schau mal bei Math.random() vorbei...
Gruß, LX
Übergib doch mal das Objekt das die Funktion aufruft an diese Funktion, und gebe diese aus, schon weißt du welches Obejkt die Funktion wann aufruft.
Bsp:
<input type="button" ... onclick="nurso(12, 13, 14, this);" />
function nurso(a, b, c, NEU_PARAM) {
...
alert("Obj: "+ NEU_PARAM +"\nObj.id: "+ NEU_PARAM.id);
...
}
Übergib doch mal das Objekt ...
}[/code]
danke, versuch ich mal.
Hi,
Am Anfang glaubte ich es läge daran, dass beide scripts die selben variablennamen verwenden, aber selbst nach änderung besteht das Problem weiterhin.
lass mich raten: Du hast die Namen in beiden JavaScript-Ressourcen gleichermaßen geändert. Richtig? Zumindest sind sie noch immer gleich und überschreiben sich somit gegenseitig.
Beschäftige Dich mit Objektorientierung.
Cheatah
lass mich raten: Du hast die Namen in beiden JavaScript-Ressourcen gleichermaßen geändert. Richtig? Zumindest sind sie noch immer gleich und überschreiben sich somit gegenseitig.
nope. wie schon im ersten post beschrieben handelt es sich um 2 scripts die in 2 verschiedenen dateien ausgelagert sind. In einer (!) wurden die variablennamen geändert.
Beschäftige Dich mit Objektorientierung.
nicht zum spaß
hallo,
nope. wie schon im ersten post beschrieben handelt es sich um 2 scripts die in 2 verschiedenen dateien ausgelagert sind. In einer (!) wurden die variablennamen geändert.
nicht alle, und da entsteht auch dein problem... aside: in wieviele dateien du dein skript aufteilst spielt bei variablennamen und wie sie sich überschreiben gar keine rolle.
bestes,
henning
Hallo,
Beschäftige Dich mit Objektorientierung.
nicht zum spaß
Hallo,
Das ist nicht schwer. Hier für deine DVDs:
var DVDs = [ // Array namens 'DVDs' als DVD-Regal:
{ // DVD-Objekt mit den Eigenschfaten:
TextFarbe: '#FFFFFF',
GrafikUrl: 'covers/dvds/001.jpg',
UnterTitel: 'X-Men - Wolverine'
},
{ // DVD-Objekt mit den Eigenschfaten:
TextFarbe: '#FFFFFF',
GrafikUrl : 'covers/dvds/002.jpg',
UnterTitel: 'Illuminati'
},
{ // DVD-Objekt mit den Eigenschfaten:
TextFarbe: '#FFFFFF',
GrafikUrl : 'covers/dvds/003.jpg',
UnterTitel: 'Terminator'
}
];
// Fuktion zum Mischen des DVD-Regals (nach Fisher-Yates):
DVDs.shuffle = function(){var v,j,i=this.length;if(!i){return false;}while(--i){v=this[i];j=Math.floor(Math.random()*(i+1));this[i]=this[j];this[j]=v;}};
Jetzt kannst du mit
DVDs.shuffle();
das Regal durchmischen und einfach immer die erste DVD anzeigen.
DVDs[0].TextFarbe // enthält die Farbe
DVDs[0].GrafikUrl // enthält den GrafikUrl
DVDs[0].UnterTitel // enthält den UnterTitel
Dasselbe für die Games, fertig.
Gruß, Don P
Hallo,
Das ist nicht schwer. Hier für deine DVDs:
[code lang=javascript]var DVDs = [ // Array namens 'DVDs' als DVD-Regal:
...
Gruß, Don P
Hey, die aw hab ich doch glatt überlesen *arghs*
vielen lieben dank für die hilfe. ich werd das gleich mal reinbasteln und ausprobieren!
lg, martin
Hi,
Die erste Funktion liegt in der Datei dvds.js und heißt rndDVD() - die 2. in games.js mit dem namen rndGame()
In meiner Seite wird jedoch zweimal die Funktion rndDVD() ausgeführt, obwohl nur 1x aufgerufen.
Lerne, die *richtigen* Schlüsse zu ziehen.
Daraus, dass du zwei mal das gleiche Ergebnis erhältst, schliesst du hier naiver Weise, dass zwei mal die gleiche Funktion aufgerufen worden wäre.
Schon die simpleste aller Debug-Maßnahmen, eine (unterschiedliche) Ausgabe per alert zu Beginn der beiden Funktionen, hätte dir hier gezeigt, dass du im Irrtum bist.
Am Anfang glaubte ich es läge daran, dass beide scripts die selben variablennamen verwenden, aber selbst nach änderung besteht das Problem weiterhin.
Dass deine Pseudo-Zufallsfunktion ziemlicher Murks ist, deutete LX bereits an - lies bitte den Artikel Gleichverteilte Zufallszahlen erzeugen, der bringt dir bei, wie man's vernünftig macht.
Genau diese Zufallsfunktion ist es nämlich auch, die dir hier Probleme macht - da du dir anscheinend nicht im geringsten Gedanken darüber gemacht hast, aus welchem Wertebereich sie Zahlen liefert.
var Anzahlx = 11; // Anzahl der Bilder
var ZufallJetztx = new Date()
var ZufallsZahlx = ZufallJetztx.getSeconds() % (Anzahlx);
% ist der Modulo-Operator, er liefert dir den "Rest" einer Ganzahl-Division, die "nicht aufgeht". ZufallsZahlx wird also hier, auf Grund von Anzahlx = 11, immer *kleiner* als 11 sein.
if (ZufallsZahlx==30) {
TextFarbe = "#FFFFFF";
GrafikUrl = "covers/games/000.jpg";
UnterTitel="Punisher - War Zone"
}
Diese und die folgenden Bedingungen, in denen der Vergleichswert bis zu 40 hoch geht, werden also nie erfüllt.
Und deshalb bekommen auch TextFarbe, GrafikUrl und UnterTitel nie neue Werte.
Wenn du beim Verändern der Variablennamen konsequent gewesen wärst, hätte dich dein Browser vielleicht mit einer Fehlermeldung darauf hinweisen können, dass diese Variablen gar nicht existieren. Aber so haben sie immer noch die Werte, die sie vorher bekommen haben.
Und deshalb geben auch beide Funktionen die gleichen Werte aus (und beide in richtig schön grauslichem HTML-Code).
Zugegeben, selbst wenn die Kombination aus Zufallsfunktion und If-Abfragen zusammenpassen würde, würdest du immer noch die gleichen Werte ausgegeben bekommen - weil du in games.js den Variablen erst mal Werte zuweist, dvds.js dann den gleichen Variablen noch mal neue Werte zuweisen würde - und erst viel später die Funktionen aufgerufen werden, die die aktuellen Werte dann ausgeben.
MfG ChrisB
Hm, verstehe. Das mit Modulo leuchtet ein .. *grmpf*
Ich schau mir math.random() grade an und werde das dann vernünftig verbauen.
Danke für die Flames (ja, so toll bin ich nicht) und deine Mühe, mir den Sachverhalt zu verdeutlichen - hat funktioniert.
Gruß, Martin