Autor | Zpráva | ||
---|---|---|---|
Martin02 Profil |
#1 · Zasláno: 26. 2. 2011, 21:00:44
Ahoj,
prosimvás, můžete mi někdo poradit? Proč tento kód nefubguje? <script type="text/javascript"> function updatecas() { var cas = new Date(); if(cas.getDate().toString().length == 1) { var den = "0" + cas.getDate().toString(); } else { var den = cas.getDate().toString(); } if(cas.getMonth().toString().length == 1) { var mesic = "0" + cas.getMonth().toString(); } else { var mesic = cas.getMonth().toString(); } var rok = cas.getFullYear(); if(cas.getHours().toString().length == 1) { var hodina = "0" + cas.getHours().toString(); } else { var hodina = cas.getHours().toString(); } if(cas.getMinutes().toString().length == 1) { var minuta = "0" + cas.getMinutes().toString(); } else { var minuta = cas.getMinutes().toString(); } if(cas.getSeconds().toString().length == 1) { var sekunda = "0" + cas.getSeconds().toString(); } else { var sekunda = cas.getSeconds().toString(); } var menoDne = cas.getDay; switch(menoDne) { case "1": var pondeli = "podělí "; break; case "2": var utery = "úterý "; break; case "3": var streda = "středa "; break; case "4": var ctvrtek = "čtvrtek "; break; case "5": var patek = "pátek "; break; case "6": var sobota = "sobota "; break; case "7": var nedele = "neděle "; break; } var nazevDne = [pondeli, utery, strda, ctvrtek, patek, sobota, nedele]; document.getElementById("cas").innerHTML = "Dnes je " + nazevDne + den + "." + mesic + "." + rok + " " + hodina + ":" + minuta + ":" + sekunda; } setInterval("updatecas()",500) </script> Děkuji |
||
Witiko Profil |
#2 · Zasláno: 26. 2. 2011, 21:19:00 · Upravil/a: Witiko
var menoDne = cas.getDay; --> var menoDne = cas.getDay(); případně jen switch(cas.getDay()) {} , proměnná se jinde nepoužívá.
var nazevDne = [pondeli, utery, strda, ctvrtek, patek, sobota, nedele]; --> var nazevDne = ["pondeli","utery","streda","ctvrtek","patek", "sobota","nedele"]; setInterval("updatecas()",500); --> setInterval(updatecas, 500); No a co se kódu týče (ne funkcionality): if(cas.getMinutes().toString().length == 1) { // Dvojité volání jedné a té samé funkce var minuta = "0" + cas.getMinutes().toString(); // Dvojité volání jedné a té samé funkce, Dvojitá deklarace } else { var minuta = cas.getMinutes().toString(); // Dvojitá deklarace } ... document.getElementById("cas").innerHTML = ...; // Každých 500 milisekund voláme funkci na nalezení jednoho a toho samého elementu Dvojité volání jedné a té samé funkce: Navrácenou hodnotu stačí uložit do proměnné a není třeba funkci volat mnohonásobně. Dvojitá deklarace: Stačí si proměnné nadeklarovat prázdné jednou na začátku funkce a pak do nich přiřazovat. Deklarace a přiřazení proměnné není jedno a to samé. Jakmile je kdekoliv v těle funkce deklarována funkce klíčovým slovem var, je podobně jako funkce první třídy (deklarované pomocí klíčového sova function) deklarována po celou dobu exekuce funkce s hodnotou undefined, dokud ta není přiřazena; dvojitá deklarace je tudíž zbytečná. Každých 500 milisekund voláme funkci na nalezení jednoho a toho samého elementu: Stačí uložit element do globální proměnné, tedy: <script type="text/javascript"> var element; window.onload = function() { element = document.getElementById("cas"); setInterval(updatecas, 500); } ... To je vše, čeho jsem si všimnul. |
||
Martin02 Profil |
#3 · Zasláno: 26. 2. 2011, 22:23:10 · Upravil/a: Martin02
Zkoušel jsem to podle toho změnit, ale var nazevDne = ["pondeli","utery","streda","ctvrtek","patek", "sobota","nedele"]; s uvozovkama mi vypíše "pondeli,utery,streda...". Pak jsem to zkusil trochu poupravit na tohle(ukazuji pouze koncový hlavní kód scriptu):
var menoDne = cas.getDay(); switch(menoDne) { case 1: var pondeli = "pondělí "; break; case 2: var utery = "úterý "; break; case 3: var streda = "středa "; break; case 4: var ctvrtek = "čtvrtek "; break; case 5: var patek = "pátek "; break; case 6: var sobota = "sobota "; break; case 7: var nedele = "neděle "; break; } var nazevDne = [pondeli || utery || streda || ctvrtek || patek || sobota || nedele]; document.getElementById("cas").innerHTML = "Dnes je " + nazevDne + den + ". " + mesic + ". " + rok + " " + hodina + ":" + minuta + ":" + sekunda; } setInterval(updatecas), 500; Takže jsem vymazal uvozovka u čísel dnů a místo čárek v poli nazevDne jsem dal ||. Teď už vše funguje. Děkuji za radu, dost mi to mohlo. |
||
Witiko Profil |
#4 · Zasláno: 26. 2. 2011, 22:47:19 · Upravil/a: Witiko
Martin02:
Tohle je velice zvrhlý kód... Pro účel rekapitulace: Tvůj kód dělá (v případě, že bys to nevěděl) následující - Nadeklaruješ si 7 proměnných pro každý den v týdnu, přičemž do jedné z nich uložíš text shodný s jejím jménem. Poté vybereš jednu z těchto 7mi proměnných, která má přiřazenou hodnotu a tu uložíš do prvního segmentu pole, jehož obsah poté vypíšeš. Navíc máš chybu v zápisu: setInterval(updatecas), 500; /* místo */ setInterval(updatecas, 500); Většina prohlížečů bere vynechání argumentu času jako pokyn k tomu, aby spouštěla danou funkci co nejrychleji, což asi není kýžené, když v případě odpočítávání bohatě stačí interval jedné sekundy, jelikož setInterval časové rozestupy udržuje a "nerozlézá se" postupem času. Co si třeba vytvořit proměnnou jednu, do ní uložit jméno dne a pak ji vypsat? Není to "trochu" jednodušší? Namísto tebou vypsaného zvaž použití následujícího kódu: var nazevDne; switch(cas.getDay()) { case 1: nazevDne = "pondělí"; break; case 2: nazevDne = "úterý"; break; case 3: nazevDne = "středa"; break; case 4: nazevDne = "čtvrtek"; break; case 5: nazevDne = "pátek"; break; case 6: nazevDne = "sobota"; break; default: nazevDne = "neděle"; } document.getElementById("cas").innerHTML = "Dnes je " + nazevDne + " " + den + ". " + mesic + ". " + rok + " " + hodina + ":" + minuta + ":" + sekunda; } setInterval(updatecas, 1000); |
||
Martin02 Profil |
#5 · Zasláno: 26. 2. 2011, 23:25:10
Hele, já nejsem žádný expert na tohle, mě jde jen o to, aby mi fungovala funkce, která zobrazuje datum a čas a na tom ostatním mi ani moc nezáleží, ale asi máš pravdu, že je to jednodušší.
dík |
||
TomasJ Profil |
#6 · Zasláno: 27. 2. 2011, 15:06:09 · Upravil/a: TomasJ
Jednodušší?!
Podle mě je jednodušší toto: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script> var Dny = ["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],elem_cas; window.onload=function(){elem_cas=document.getElementById("cas");setInterval(GetTime,1000);} function Edit(val){if(val.toString().length==1){return "0"+val;}else{return val;}} function GetTime() { var cas = new Date(), d = Edit(cas.getDate()), m = Edit(cas.getMonth()), y = cas.getFullYear(), h = Edit(cas.getHours()), i = Edit(cas.getMinutes()), s = Edit(cas.getSeconds()), str_d = Dny[cas.getDay()]; elem_cas.innerHTML="Dnes je "+str_d+", "+d+"."+m+". "+y+" - "+h+":"+i+":"+s; } </script> </head> <body> <span id="cas"></span> </body> </html> EDIT: Tohle jsem sepsal asi za 5 minut. Šlo by to ještě kratší, ale to bych musel vynechat proměnné a dosazovat do řetězce přímo, jenže to už by nebylo přehledné. |
||
Časová prodleva: 8 dní
|
|||
Martin02 Profil |
#7 · Zasláno: 7. 3. 2011, 19:09:30
sry, ale tomu tvému kódu vůbec nerozumím :( (ne pro to, že by nebyl přehledný, ale pro to, že vůbec nevím jak se používá a co je třeba elem_cas, Edit(val) atd. Zkrátka js neumim moc dobře, ale mě tamten kód fungoval, takže dobrý)
|
||
TomasJ Profil |
#8 · Zasláno: 7. 3. 2011, 21:08:41 · Upravil/a: TomasJ
Martin02:
Dobrá trochu ti to rozepíšu. <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script> var Dny = ["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"], elem_cas; //Vytvoření pole Dny a proměnné elem_cas. window.onload=function(){ //Po načtení okna se stane toto: elem_cas=document.getElementById("cas"); //Do proměnné elem_cas se načte element navrácený z jeho id ("cas"). setInterval(GetTime,1000); //Nastaví se interval na obnovu času (zde 1 sekunda). } function Edit(val){ //Funkce pro přidělování nuly před jednomístná čísla. if(val.toString().length==1){return "0"+val;} //Pokud má vstupní hodnota délku 1 znak, vrátí nulu a za ní vstupní hodnotu. else{return val;} //V obráceném případě vrátí pouze hodnotu (tak jak přišla). } function GetTime() //Již samotná funkce na zjištění času. { var cas = new Date(), //Vytvoření instance času. d = Edit(cas.getDate()), //den m = Edit(cas.getMonth()), //měsíc y = cas.getFullYear(), //rok h = Edit(cas.getHours()), //hodina i = Edit(cas.getMinutes()), //minuta s = Edit(cas.getSeconds()), //sekunda str_d = Dny[cas.getDay()]; //den slovně elem_cas.innerHTML="Dnes je "+str_d+", "+d+"."+m+". "+y+" - "+h+":"+i+":"+s; //Do obsahu elementu se zapíše čas. } </script> </head> <body> <span id="cas"></span> </body> </html> EDIT: Speciálně pro tebe živá ukázka |
||
Časová prodleva: 13 let
|
0