Autor Zpráva
dufeja
Profil
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
"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
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
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
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
" 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
"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
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
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
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
dufeja
IE7 blokuje promt panelem. Obvykle se ale zeptá, zda to povolit
souki
Profil
Mimochodem na té stránce nejde označit text :)
dufeja
Profil
No a co, k čemu by si to potřeboval?

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0