Autor | Zpráva | ||
---|---|---|---|
dufeja Profil |
#1 · Zasláno: 2. 4. 2008, 14:22:35 · Upravil/a: dufeja
Na mé stránky jsem dal docela známou jednoduchou hru (Původní verze) a chtěl jsem k ní udělat rekordy. Udělal jsem to tak, že se nejdříve v php načte 10. nejlepší čas a uloží se do cookie a pokud hráč udělá čas lepší, vyzve ho to k zadání jména, které si i s časem uloží zase do cookie a poté přes php se uloží do db, seřadí a nejlepších 10 se zobrazí. Funguje mi to dobře, ale pouze v Opeře a nemůžu najít chybu, která zamezuje tomu, aby to šlo ve FF a IE. Chyba je s největší pravděpodobností v tom javascriptu. Proto bych vám byl moc vděčný, kdyby jste mi poradili. Předem děkuji.
Problémová stránka je zde |
||
peta Profil |
#2 · Zasláno: 3. 4. 2008, 10:04:10
"Chyba je s největší pravděpodobností v tom javascriptu"
.. / javascript Co vypisuje JS konzola, kdyz je to chyba JS? Tam se vypisuji chyby. Opera jako takova je smejd! Povazoval bych za nahodu, ze to funguje. JS konzola: Varování: Chyba při parsování hodnoty vlastnosti 'top'. Deklarace vynechána. Zdrojový soubor: http://www.babylon-pong.wz.cz/klickovana.php Řádek: 0 Totez s left, cili mas bud nastaveny spatny DOCTYPE v HTML nebo musis JS upravit tak, aby k pozici pridal objekt.top=cislo+'px' a pozici snimal jako parseInt(objekt.top) |
||
dufeja Profil |
#3 · Zasláno: 4. 4. 2008, 10:46:21
A jaký DOCTYPE mám tedy použít?? A v tom javascriptu, kde píšete by chyba být neměla, poněvadž na této stránce je to stejně a funguje to. Chyby v js může být v té komunikaci z cookies. Děkuji
|
||
Chamurappi Profil |
#4 · Zasláno: 4. 4. 2008, 11:02:32
Reaguji na dufeju:
Logika velí, že bys měl použít asi stejný <!doctype>, jako je na té funkční stránce. Ne? Je celkem jedno, co v něm máš napsané, důležitý je vykreslovací režim. Původní verze je odladěna pro quirk, nová se přepíná do standardu. Když tam dáš jakýkoliv <!doctype> vyvolávající quirk (třeba žádný), tak to pojede. Lepší řešení ovšem je doplňovat jednotky „px“ k rozměrům. Kdykoliv nastavuješ top a left, nezapomeň na „+ "px"“. Víc problémů tam asi není. |
||
dufeja Profil |
#5 · Zasláno: 4. 4. 2008, 16:53:28
To jak ste říkali s tima pixelama jsem udělal, stejně tak jsem vymazal doctype a díky tomu jsem to rozběhal na FF, ale znovu je to jediný prohlížeč, kde to jde. Tentokrát nejede Opera a IE. Fakt to nechápu.
|
||
Měsíček Profil |
#6 · Zasláno: 4. 4. 2008, 16:57:25
" stejně tak jsem vymazal doctype a díky tomu jsem to rozběhal na FF,"
A proč? DOCTYP mazat nemusíš. Můžeš si vybrat mezi těmito dvěma .. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> a <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> Ten první uvede prohlížeč do quirku, druhý do standartu. |
||
Měsíček Profil |
#7 · Zasláno: 4. 4. 2008, 16:59:22
"Tentokrát nejede Opera a IE."
V tom případě by to možná šlo ještě takhle .. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://"> FF s O by to mělo uvést do quirku a IE do standartu, ale je to lamařina, myslím, že zde někdo nahodí mnohem lepší způsob a myslím, že chyba není ani tak v HTML jako spíše ve skriptu JS. |
||
dufeja Profil |
#8 · Zasláno: 4. 4. 2008, 21:00:47 · Upravil/a: dufeja
To taky nefunguje, já bych též řek, že to v žádným Doctypu nebude, ale že to bude v js. Ale nevím, kde tam může být chyba. Do původního javascritptu, který bez problémů funguje všude, jsem jen přidal:
funkci na čtení cookies function precti(nazev) { obsah=document.cookie; upravene=obsah.split(';'); velikost=upravene.length; kusy=""; vrat=""; for (x=0;(x<velikost && vrat=="");x++) { kusy=upravene[x].split('='); if (kusy[0].substring(0,1)==' ') kusy[0]=kusy[0].substring(1,kusy[0].length); if (kusy[0]==nazev) vrat=kusy[1]; } if (vrat) return unescape(vrat); else return false; } na zápis cookie function zapis(nazev,hodnota,vyprsi) { datum=new Date(); if(vyprsi) { datum.setTime(datum.getTime()+vyprsi); document.cookie=nazev+"="+escape(hodnota) +"; expires="+datum.toGMTString(); } else document.cookie=nazev+"="+escape(hodnota); } a tady jsem do původního skriptu přidal vše od proměné desaty if (finaltime == 0) { finaltime = calctime(); window.alert("Vydrzel jsi " + finaltime +" sekund!"); desaty=precti('cas'); if(finaltime>desaty) { rekord=prompt("Udělal si nový rekord!! Napiš své jméno"); zapis("cas2",finaltime); zapis("jmeno",rekord); } V cookies je pod jménem "cas" uložen 10. nejlepší výsledek v databázi, takže když někdo udělá čas lepší(finaltime), tak to po něm chce jméno a následně se vše uloží do cookies a poté přes php do db. Jinak ale velice děkuji, že se mi snažíte pomoc. |
||
Měsíček Profil |
#9 · Zasláno: 4. 4. 2008, 22:17:09
Hmm .. v IE7 jsem vydržel 14,67 sekund a zapsal jsem se jako null .. jinak nebylo by lepší dát před proměnnou var?
|
||
dufeja Profil |
#10 · Zasláno: 4. 4. 2008, 22:36:59 · Upravil/a: dufeja
Ve ff a Opeře to už běží bez problémů, ale v IE opravdu nefunguje příkaz prompt. I když jsem tam dal var, tak to stále nejde.
|
||
souki Profil |
#11 · Zasláno: 4. 4. 2008, 23:37:33
dufeja
IE7 blokuje promt panelem. Obvykle se ale zeptá, zda to povolit |
||
souki Profil |
#12 · Zasláno: 4. 4. 2008, 23:41:58
Mimochodem na té stránce nejde označit text :)
|
||
dufeja Profil |
#13 · Zasláno: 5. 4. 2008, 14:54:08
No a co, k čemu by si to potřeboval?
|
||
Časová prodleva: 16 let
|
0