Autor Zpráva
147477
Profil
<html>

<head>

<meta charset="windows-1250">
<title>WWW</title>

<script type="text/javascript">
function cdtd() {
var xmas = new Date("July 16, 2013 21:12:00");
var now = new Date();
var timeDiff = xmas.getTime() - now.getTime();

if (timeDiff <= 0) {
clearTimeout(timer);
window.location = "http://google.cz";
clearTimeout(timer);
}

var seconds = Math.floor(timeDiff / 1000);
var minutes = Math.floor(seconds / 60);
var hours = Math.floor(minutes / 60);
var days = Math.floor(hours / 24);
hours %= 24;
    minutes %= 60;
    seconds %= 60;
document.getElementById("daysBox").innerHTML = days;
document.getElementById("hoursBox").innerHTML = hours;
document.getElementById("minsBox").innerHTML = minutes;
document.getElementById("secsBox").innerHTML = seconds;
var timer = setTimeout('cdtd()',1000);
}

</script>
</head>

<body>

<p style="text-align: center"><big><big>

Zbývá <span id="daysBox"></span> dní, <span id="hoursBox"></span> hodin, <span id="minsBox"></span> minut a <span id="secsBox"></span> sekund.

</big></big></p>

<script type="text/javascript">cdtd();</script>

</body>

</html> 
Dobrý večer,

ve výše uvedeném kódu bych rád vyřešil tři základní problémy:

1) Skloňování koncovek dle spisovné češtiny, tedy např. ke tvaru "sekund" přidat i "sekundy" a "sekundu".
2) ClearTimeout očividně nefunguje. Ještě než se stihne stránka přesměrovat, začne to nabíhat do záporných hodnot.
3) Tvar "0 dní, 0 hodin..." se mi moc nelíbí. Nešlo by nulové tvary ukrýt?

Předem díky za parciální či dokonce komplexní řešení.
Zechy
Profil
Jednička je sekunda, 2 - 4 jsou sekundy, od 5 to je sekund, těžký napsat podmínku? :-)
147477
Profil
Nějak takhle? (Škoda, že mi to nefunguje.)
<script type="text/javascript">

if (secsBox == 1) {
document.write('Zbývá <span id="secsBox"></span> sekunda.');
}

if (secsBox > 1 && secsBox < 5) {
document.write('Zbývá <span id="secsBox"></span> sekundy.');
}

if (secsBox > 4) {
document.write('Zbývá <span id="secsBox"></span> sekund.');
}

</script>
petr 6
Profil
147477:
Škoda, že mi to nefunguje.
To je fakt škoda. Asi to máš rozbitý...

2) ClearTimeout očividně nefunguje. Ještě než se stihne stránka přesměrovat, začne to nabíhat do záporných hodnot.

Ale funguje. Akorát poté, co timeout na řádku 15 a následně na řádku 17 "vyčistíš", tak ho na řádku 31 znovu nastavíš bez ohledu na hodnotu parametru timeDiff.
147477
Profil
Za duplicitu řádku 15 a 17 se samozřejmě omlouvám, jedná se čistě o nepozornost.

Když odstraním řádek 31, tak přestane odpočet fungovat v reálném čase a čísla se změní jen při obnovení stránky. Je nějaká možnost, jak to zafixovat?

Teď mě napadá, že když úspěšně vyřeším problém číslo 1, vyřeším tím zároveň i trojku.
petr 6
Profil
147477:
Když odstraním řádek 31, tak přestane odpočet fungovat v reálném čase a čísla se změní jen při obnovení stránky.
To je vcelku samozřejmé.

Je nějaká možnost, jak to zafixovat?
Ano. Ošetřit ten řádek podmínkou v závislosti na timeDiff.
_es
Profil
147477:
Nějak takhle? (Škoda, že mi to nefunguje.)
Nejako tak, že napíšeš hocijaký očividný nezmysel a dúfaš, že sa niekto zľutuje nad tvojou lenivosťou a celé ti to napíše?
147477
Profil
Očividný? Tvořil jsem ho svědomitě přes půl hodiny. Takže skvělé fóry na večer (bez urážky).. :D

Beztak je tam jen nějaká banální chyna, jak to většinou bývá.
margin
Profil *
Časté potíže, zajímavosti a poučné debaty » Psaní metodou document.write po načtení stránky maže stránku
_es
Profil
147477:
Skús vyjsť z iného skriptu, trebárs z tohoto a podobne, ako je tam spravené skloňovanie dní, sprav aj skloňovanie sekúnd.
petr 6
Profil
147477:
Očividný? Tvořil jsem ho svědomitě přes půl hodiny.
Kvalitu nelze nahrazovat kvantitou.

Kdybys třeba popsal, jaký problém máš s tvým kódem* trochu specifičtěji, než že nefunguje, dočkal by ses příznivější odpovědi.

Edit: * myšleno kód v [#3]
147477
Profil
Téměř vše se mi podařilo hloubkovým přepracováním vyřešit, akorát bych potřeboval implementovat do tohoto kódu variantu "dny", "hodiny", "minuty" a "sekundy".

        if(days != 0){out += days +" "+((days==1)?"den":"dní")+", ";}
        if(hours != 0){out += hours +" "+((hours==1)?"hodina":"hodin")+", ";}
        if(mins != 0){out += mins +" "+((mins==1)?"minuta":"minut")+", ";}
        if(secs != 0){out += secs +" "+((secs==1)?"sekunda":"sekund")+", ";}

Vyřešeno:

        if(days != 0){out += days +" "+((days==1)?"den":(days > 1 && days < 5)?"dny":"dní")+", ";}
        if(hours != 0){out += hours +" "+((hours==1)?"hodina":(hours > 1 && hours < 5)?"hodiny":"hodin")+", ";}
        if(mins != 0){out += mins +" "+((mins==1)?"minuta":(mins > 1 && mins < 5)?"minuty":"minut")+", ";}
        if(secs != 0){out += secs +" "+((secs==1)?"sekunda":(secs > 1 && secs < 5)?"sekundy":"sekund")+", ";}

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: