mmofacts.com

JavaScript und Firefox

gepostet vor 18 Jahre, 8 Monate von dan kirpan
Hi,

ich glaube das ist eine Anfängerfrage, obwohl ich keine Lösung für finde...

Ich habe einen Java-Script-Counter, der runterzählt... so weit so gut. Er geht auf allen IEs, die ich gesehen hab... er geht auch auf Firefox, solange nur ein Counter pro Seite verwendet wird. Sobald mehrere Counter verwendet werden, steigt Firefox aus. Ich hab zu erst gedacht, Firefox mag es nicht, wenn 10 setTimeout() gleichzeitig laufen und hab den Code so zusammengefasst, dass nur noch ein setTimeout() läuft und nur eine Funktion aufgerufen wird, die alle Counter beinhaltet. Der Counter wird übrigens über ein
document.getElementById("ID").innerText = stunden + ":" + minuten + ":" + sekunden;
ausgegeben. Das dürfte kein Problem sein, weil es bei einem anderen Counter ja auch geht. Wer sich den Code anschauen möchte, schaut auf www.sassault.de rein oder schreibt mir eine PM, ich schicke dann den Quelltext zu.

Nochwas: Es kommen keine "Java-Script-Error"-Meldungen. Im internen Meckerfeld von Firefox, wo die ganzen HTML-Verbrechen angegeben werden und dass sie ignoriert werden kommt auch keine Meldung.

Danke für Hilfe...
gepostet vor 18 Jahre, 8 Monate von Drezil
Wieso so schwer?
In der Snippet-Datenbank (ich denke mal du hast da zugriff) liegt doch nen Couter, der im IE und FF funzt (und der ist extra auf die geforderten aufagben getrimmt)...
http://snippets.galaxy-news.de/javascript:counter
gepostet vor 18 Jahre, 8 Monate von Chojin
@Derzil: das ist das anfängerforum.
@dan kirpan: weil eine ID einzigartig sein muss und wenn du eine ID, in deinem fall sinnigerweise "ID" genannt zweimal auf einer seite hast, schmeist dir Firefox einen fehler. IE ist da noch etwas großzügiger. Der fehler liegt also an deiner HTML struktur und der art und weise diese auszulesen.

reg4rds
chojin
gepostet vor 18 Jahre, 8 Monate von Drezil
ja, nur da er auch im fortgeschrittenen-forum schreibt, kann man ihn doch mal drauf hinweisen =)
gepostet vor 18 Jahre, 8 Monate von dan kirpan
@chojin: ich hab nur den Platzhalter ID dafür verwendet... dort steht für jeden bereich einer seite ein eindeutiger name + die dazugehörige ID dessen was gezählt wird.

Beispiel: Eine Flotte hat das ziel mich anzugreifen. Dann ist die Flotte unter "Fremde Flottenbewegungen" da und unter "Abfangbare Flottenbewegungen". Ersterer Heist fleeet123 (fleet > eigene Flotten; fleeet für fremde flotten; fleeeet für abfangbare Flotten) und derzweite heist fleeeet123... also sind alle Datenbereiche eindeutig deklariert... 123 ist hier übrigens die eindeutige ID aus der Datenbank...

Nochwas: der IE kann gleichnamige Elemente überhaupt nicht leiden bringt immer brav seine Fehlermeldung!

@Drezil: ich schau mir das Script mal an...
gepostet vor 18 Jahre, 8 Monate von HSINC
ohne code kann man da gar nix sagen
und nein ich habe auch keine lust mir erst den code zusammensuchen zu müssen
gepostet vor 18 Jahre, 8 Monate von Macavity
jop schick mal den ganzen relavanten Code... du kannst ja schlecht erwarten das wir uns extra bei sassault anmelden und dann alles seiten durchstöbern bis wir den Code-Schnippsel gefunden haben
gepostet vor 18 Jahre, 8 Monate von knalli
Eine ID darf nicht zweimal vorkommen, das widerspricht der Logik der ID. Der IE nimmt mW einfach das erste Element (50:50, sonst immer das letzte vorkommende), der Firefox macht wie oben bereits erwähnt nichts, als einen Fehler auszuspucken.

Persönlich finde ich die Handhabung vom IE hier besser, zwar zwingt einen das nicht zu validen Arbeit, aber die Fehlermeldung ist beim Endnutzer auch dumm.
gepostet vor 18 Jahre, 8 Monate von dan kirpan
die id ist eindeutig... die weil: fleet123 und fleeet123 ist 2x die Flotte mit der ID 123, einmal im fleetbereich, einmal im fleeetbereich (die eee sind kein rechtschreibfehler)

hier dier code... ihr habt es so gewollt...
 


und ja, ich weiß, dass es kürzer geht... ich will aber wissen, wo der fehler ist...
gepostet vor 18 Jahre, 8 Monate von Macavity
oh shit...sag mal bist du noch nie auf die idee gekommen das man das auch etwas kürzer fassen könnte??

da ist zum beispiel ein Teil der für alle Planeten das gleiche macht...

das könnte man so kürzer machen...(oder mit arrays würde es auch gehen.)

einfach eine neue Funktion oben definieren:
function stuff(planet_number){

minuten_z = eval('sekunden_planet'+planet_number+' / 60;');
minuten = Math.round(minuten_z);
if (minuten > minuten_z)
minuten--;
sekunden = eval('sekunden_planet'+planet_number+' - minuten * 60;');
stunden_planet551790 = minuten / 60;
stunden = Math.round(eval('stunden_planet'+planet_number));
bStundenPlanet = eval('stunden_planet'+planet_number+' < stunden;');
if (bStundenPlanet)
stunden--;
minuten = minuten - stunden * 60;
if (stunden < 10)
stunden = "0" + stunden;
if (minuten < 10)
minuten = "0" + minuten;
if (sekunden < 10)
sekunden = "0" + sekunden;
if (stunden == "00" && minuten == "00" && sekunden == "00"){
document.getElementById("planet"+planet_number).innerText = "--:--:--";
}
else{
sekunden_planet551790 = sekunden_planet551790 - 1;
document.getElementById("planet"+planet_number).innerText = stunden + ":" + minuten + ":" + sekunden;
}
}

und jetzt musst du nur noch die einzelnen Planeten mit
 

someStuff(551790);
someStuff(553831);
someStuff(553832);
someStuff(555050);
someStuff(555050);
nacheinander durchlaufen lassen...

und auf die gleiche Art kannst du auch die Flotten durcharbeiten lassen...
dann lassen sich fehler auch leichter finden weil du bei Änderungen nicht 20 einzelne Stellen verändern musst sondern nur 1 Stelle
gepostet vor 18 Jahre, 8 Monate von Kallisti
Ohne Funktionen solltest du auch darauf achten nicht denselben Variablennamen mehrfach zu nutzen...
gepostet vor 18 Jahre, 8 Monate von dan kirpan
nein, dort ist kein variablenname doppelt... sonst würde es zwar beim IE funktionieren, aber nicht korrekt...
gepostet vor 18 Jahre, 8 Monate von ObiJ
documentier dein code mal
da sieht doch sonst kein schwein durch, hier siehst du wie:
www.galileocomputing.de/openbook/javainsel4/javainsel_02_007.htm
btw: javaScript ist nicht gleich Java ^^

»The Java Developer’s Resource« ein Zitat: »Java and JavaScript are about as closely related as the Trump Taj Mahal in Atlantic City is to the Taj Mahal in India. In other words Java and JavaScript both have the word Java in their names. JavaScript is a programming language from Netscape which is incorporated in their browsers. It is superficially similar to Java in the same way C is similar to Java but differs in all important respects.«
gepostet vor 18 Jahre, 8 Monate von dan kirpan
 


Hoffe das reicht zu kommentieren...

Ich betone nocheinmal: Ich weiß, den Code kann man kürzen... man kann in verfunktionalisieren... ich hab auch vor das zu tun... aber: ich will verda**** nochmal wissen, warum das der Firefox nicht packt...
gepostet vor 18 Jahre, 8 Monate von knalli
// wielange wird auf dem aktuellen Planeten gebaut?

gebaude_sekunden_z = 514;

// wieviele Sekunden wird auf dem Planet mit der dbID 551790 (also 5:51:79) gebaut?
sekunden_planet551790 = 7477;

// wieviele Sekunden wird auf dem Planet mit der dbID 553831 gebaut?
sekunden_planet553831 = 35983;

// wieviele Sekunden wird auf dem Planet mit der dbID 553832 gebaut?sekunden_planet553832 = 7076;
// wieviele Sekunden wird auf dem Planet mit der dbID 555050 gebaut?sekunden_planet555050 = 6018;
// wie lange fliegt die Flotte mit der dbID 47617 (eigene Flotte)
sekunden_fleeet47617 = 765;

// wie lange fliegt die Flotte mit der dbID 47649 (abfangbare Flotte)
sekunden_fleeeeet47649 = 84;

// wie lange fliegt die Flotte mit der dbID 47595 (abfangbare Flotte)
sekunden_fleeeeet47595 = 8660;

// wie lange fliegt die Flotte mit der dbID 47588 (abfangbare Flotte)
sekunden_fleeeeet47588 = 23830;

// wie lange fliegt die Flotte mit der dbID 47601 (abfangbare Flotte)
sekunden_fleeeeet47601 = 39224;









/* Funktion, die */
function zeitweiter()
{
// Umrechnung Sekunden in Minuten
gebaude_minuten_z = gebaude_sekunden_z / 60;
gebaude_minuten = Math.round(gebaude_minuten_z);

if (gebaude_minuten > gebaude_minuten_z)
gebaude_minuten--;

gebaude_sekunden = gebaude_sekunden_z - gebaude_minuten * 60;


// Umrechnung Minuten in Stunden
gebaude_stunden_z = gebaude_minuten / 60;
gebaude_stunden = Math.round(gebaude_stunden_z);

if (gebaude_stunden > gebaude_stunden_z)
gebaude_stunden--;


// Wenn eine negative Stundenanzahl berechnet wird, ist das Gebäude fertig, ist nur Bughunting, wenn oben eine negative Dauer angegeben worden ist
gebaude_ende = 0;

if (gebaude_stunden < 0)
gebaude_ende = 1;


// Ziehe berechnete Stunden von der Minutenanzahl ab
gebaude_minuten = gebaude_minuten - gebaude_stunden * 60;


// Hänge eine 0 vornedran, wenn stunde kleiner 10 (9 > 09)
if (gebaude_stunden < 10)
gebaude_stunden = "0" + gebaude_stunden;


// Hänge eine 0 vornedran, wenn minute kleiner 10 (9 > 09)
if (gebaude_minuten < 10)
gebaude_minuten = "0" + gebaude_minuten;


// Hänge eine 0 vornedran, wenn sekunde kleiner 10 (9 > 09)
if (gebaude_sekunden < 10)
gebaude_sekunden = "0" + gebaude_sekunden;


// Wenn das ganze 0 ist, dann steig aus
if (gebaude_stunden == "00" && gebaude_minuten == "00" && gebaude_sekunden == "00")
{
// Gib den Ausstieg bekannt in das eindeutige Element (div) gebaude_ausgabe
document.getElementById("gebaude_ausgabe").innerText = "--:--:--";
}

if (gebaude_ende != 1)
{
// Wenn das die Stundenanzahl nicht negativ ist rechne weiter und gib den Schmarrn aus
gebaude_sekunden_z = gebaude_sekunden_z - 1;
document.getElementById("gebaude_ausgabe").innerText = gebaude_stunden + ":" + gebaude_minuten + ":" + gebaude_sekunden;
}

// Mache das selbe mit anderer Variable...
// *zensord*

// Ruf dich selber wieder auf, wenn 1000 milisekunden (also 1 Sekunde) abgelaufen ist...
setTimeout ('zeitweiter()', 1000);
}


So würde ich das mal ordnen.. dann kann man das auch nachvollziehen.

Das Problem ist mE, dass du mit "Wenn eine negative Stundenanzahl berechnet wird, ist das Gebäude fertig, ist nur Bughunting, wenn oben eine negative Dauer angegeben worden ist" dafür sorgst, dass er in "if (gebaude_ende != 1)" keine Werte reinschreibt; ich schätze, hier musst du noch ein bisschen ausbessern. Wenn du eine alertbox an passender Stelle machst, siehst du nämlich, dass der Counter eigentlich funktioniert; nur mit dem "gebaude_ende" läufts wg. o.g. schief.
gepostet vor 18 Jahre, 8 Monate von dan kirpan
okay, das werde ich mal ausprobieren...

Auf diese Diskussion antworten