Autor | Zpráva | ||
---|---|---|---|
Joan Profil |
#1 · Zasláno: 19. 10. 2010, 14:55:22
Mám problém s předáním vložené hodnoty a jejím doplněním do value inputu: V HTML kódu mám:
<form name="fm"> <input type="text" id="zadano" name="zadano" size=20 value="Bylo zadáno: "> <input type="text" id="sekundy" name="sekundy"> </form> což se objeví při natažení stránky. K této hodnotě "Bylo zadáno: " chci skriptem dopsat hodnotu, která byla vložena uživatelem: c = parseInt(document.fm.sekundy.value); var k; k == c; document.fm.zadano.value = +k+ " sekund"; a rázem se mi původní value "Bylo zadáno: " přepíše na "NaN sekund" místo např. "Bylo zadáno: 300 sekund". Já vím, skript nefunguje jak má, ale konečně něco vypisuje ale bohužel přepisuje (místo doplnění) value deklarovanou v HTML. Doufám marně, že když přijdu na to, jak hodnotu value v inputu místo přepsání doplnit, tak že zároveň vyřeším to "NaN"? |
||
_es Profil |
#2 · Zasláno: 19. 10. 2010, 15:04:15
Joan:
Čo má podľa teba asi tak robiť príkaz: k == c; ?
Príkaz: document.fm.zadano.value = +k+ " sekund"; bude spracovaný ako: document.fm.zadano.value = (+k) + " sekund";
A (+undefined) je NaN , teda špeciálna hodnota (nečíslo) (not a number).
|
||
Joan Profil |
#3 · Zasláno: 19. 10. 2010, 20:40:36
_es:
No teda! Umazala jsem zapomenuté plusko a už je z NaN najednou Undefined. Moje přání je, aby hodnota v sekundách, zadaná do inputu s name="sekundy" se vepsala rovněž do políčka s name="zadano", ale na rozdíl od prvního inputu se neodečítala, pouze zůstala vepsaná. Prostě pro kontrolu, kolik sekund jsem zadala. A ne a ne to dát dohromady. Hodnota v proměnné "c" je číslo, tak proč v proměnné "k" najednou číslo není? A jak je to prosím s tím přepisováním v inputu? |
||
Davex Profil |
#4 · Zasláno: 19. 10. 2010, 20:44:19
Pro přířazení hodnoty do proměnné
k má být pouze jedno rovnítko na řádku k == c; .
|
||
Joan Profil |
#5 · Zasláno: 19. 10. 2010, 20:51:59
Davex:
To jsem zkusila jako první, ale jedno rovnítko odečítá, což nechci. Dvě rovnítka ponechají část textu, který chci, akorát místo počtu sekund vypíše undefined. Omlouvám se velmi, bude-li to bráno jako duplicita. Podmínka IF tam nesmí být vůbec, to pak tento kousek skriptu nereaguje vůbec. |
||
Davex Profil |
#6 · Zasláno: 19. 10. 2010, 21:19:54
Výraz (porovnání)
k == c se jen vyhodnotí a výsledek se nikam neuloží.
Na ten skript jsem se díval před několika dny a zdálo se mi, že všechno funguje, takže jsem nereagoval. Pokud chceš jen doplnit počet zadaných sekund, tak by mělo stačit odkomentovat var k a dát místo zakomentované podmínky:
if (!k) { k = c; document.fm.zadano.value = "Bylo zadáno: " + k + " sekund"; } |
||
_es Profil |
#7 · Zasláno: 19. 10. 2010, 21:25:43 · Upravil/a: _es
Joan:
Skús si na JS zohnať nejakú literatúru. To je, ako keby sa niekto snažil opraviť nejaký zložitý stroj tak, že začne bezhlavo premiestňovať súčiastky na iné miesta. Čo som vytušil, tak potrebuješ asi niečo takéto: var sek = document.getElementById("sekundy"), zad = document.getElementById("zadano"); sek.onkeyup = sek.onmouseup = sek.onchange = function(){ zad.value = "Bylo zadáno: " + this.value + " sekund"; }; |
||
Joan Profil |
#8 · Zasláno: 19. 10. 2010, 21:43:23
Davex:
Tak opravdu tam má být jedno rovnítko, už mi to funguje jak chci! Musela jsem mimo jiné proměnnou "k" přesunout vně fukce, tj. ne jako lokální, ale jako globální. |
||
Joan Profil |
#9 · Zasláno: 19. 10. 2010, 21:45:43
_es:
Skús si na JS zohnať nejakú literatúru. Věř mi, že mám dvě dobré knížky, tahám je s sebou do práce každý den a louskám v tramvaji, ale holt zatím nemám to správné programátorské myšlení jako třeba Ty. Ale nevzdávám to :-) |
||
_es Profil |
#10 · Zasláno: 19. 10. 2010, 21:50:22 · Upravil/a: _es
Joan:
Po dokončení odpočítavania nejde odpočítavanie znovu spustiť. Až po stlačení "zastav", čo nie je veľmi logické - vo Firefoxe. Možno za to môže tá neošetrená chyba: document.zvuk is undefined |
||
Joan Profil |
#11 · Zasláno: 19. 10. 2010, 22:10:07
_es:
Přesně tak, Firefox ani Opera zřejmě neznají "document.zvuk.play();", pouze Internet Explorer (od IE6 nahoru určitě). Zastavení skriptu (nebo F5) skutečně znovurozběhne skript, chová se to totožně v Mozille, Opeře i IE. Ale protože tento skript bude sloužit především mně, tak já o tom vím a spouštím ho výhradně v IE. Tuto chybu ošetří snad jen instalace doplňku Apple QuickTime , který mi ale totálně rozhodil asociace souborů, tak letěl okamžitě zase pryč. Ale jsem ráda, že jsem sesmolila skript, který mi plně dostačuje. |
||
Joan Profil |
#12 · Zasláno: 20. 10. 2010, 14:09:53
Ještě bych chtěla ve skriptu nastavit, aby hodnota proměnné k byla zobrazena tučně, tj.
document.fm.zadano.value = "Bylo zadáno: "+k+ " sekund"; tak jsem nastavila document.fm.zadano.value = "Bylo zadáno: "+k.bold()+ " sekund"; Něco jsem o formátování proměnných našla tady, ale překvapilo mě, že mi to nefunguje, konzola hlásí k.bold is not a function. Přitom např. pokusné var veta = "Zkusím tučné písmo"; document.write("Pokus: "+veta.bold()); |
||
__construct Profil |
#13 · Zasláno: 20. 10. 2010, 14:27:19 · Upravil/a: __construct
Joan:
Veď v tom odkaze máš písané, že to sú metódy objektu String ; Ty máš v premennej k integer number a okrem toho tá metóda Ti iba obalí reťazec do tagu <b> čiže by si v input e mala napr: Bylo zadáno: <b>15</b> sekund
//edit: Súhlasím s pantherom - ten input tam je zbytočný. Daj namiesto neho napr. span s id=zadano a do CSS doplň:
#zadano { background:none repeat scroll 0 0 white; border:1px solid #7F9DB9; margin-top:2em; padding:0.2em; text-align:center } |
||
panther Profil |
#14 · Zasláno: 20. 10. 2010, 14:32:14
Joan:
v inputu nelze text formátovat. Pokud chceš tučné písmo, zvážil bych, zda tam opravdu potřebuješ input, nebo jen něco, co by tak mohlo vypadat. Jaký význam ten input má? Předpokládám, že žádný :-) |
||
Joan Profil |
#15 · Zasláno: 20. 10. 2010, 15:42:54
panther:
"v inputu nelze text formátovat" Ale zeleně orámované políčko, do kterého vpisuji čas k odečítání modrým písmem, je input :-) Akorát je formátovaný stylem už při natažení stránky. Já jsem si představovala, že bude tučně pouze proměnná k, která jenom zachytí vepsaný čas, nikoliv celý text "Bylo zadáno: xxx sekund" Bohužel tohle je jen kosmetická úprava, narazila jsem na funkční chybku: celý skript správně funguje jenom po prvním otevření stránky. Podruhé až po Ctrl+F5 (samotné F5 kupodivu nestačí). Takže napřed budu muset vyřešit současnou ne-reprodukovatelnost skriptu. |
||
panther Profil |
#16 · Zasláno: 20. 10. 2010, 15:47:17
Joan:
„Ale zeleně orámované políčko, do kterého vpisuji čas k odečítání modrým písmem, je input :-)“ to ano. Špatně jsem se vyjádřil. Vnitřek i vnějšek inputu lze stylovat, ale nejde formátovat pomocí HTML tagů, tedy <b> tam nedostaneš. Jestli trváš na tom, že počet sekund má být tučně, použij místo inputu něco jiného (třeba odstavec). |
||
Joan Profil |
#17 · Zasláno: 20. 10. 2010, 22:24:14
Tak jsem to dokázala :-)
- mám barevně formátovaný obsah informačního políčka s id="zadano" (dá se bez toho žít, ale tak jednoduchý úkol jsem nechtěla vzdát) - díky mému nápadu function spust() { if(!zapnuto) { zapnuto = 1; t = setTimeout(pocitej, 1000); zapnuto = 0; } } lze časování spouštět opakovaně BEZ klikání na tlačítko Zastav - z cvičných důvodů jsem přiřazovací podmínkou odlišila české skloňování sekundy vs. sekund S čím zatím zápolím je, aby se po proběhnutí časování vymazal obsah proměnné k, čili aby se s novým spuštěním skriptu vepsala do informačního políčka nová správná hodnota zadaného času. c = parseInt(document.fm.sekundy.value); if(!k) { k = c; var sek = (k <= 4) ? "sekundy" : "sekund"; document.getElementById("zadano").innerHTML = "<div id='cas'>Bylo zadáno: <span>" +k+ " </span>" +sek+ "</div>"; //delete k; } ale proměnnou asi nelze jen tak jednoduše smazat, že? |
||
panther Profil |
#18 · Zasláno: 20. 10. 2010, 22:48:28
|
||
Davex Profil |
#19 · Zasláno: 20. 10. 2010, 23:09:29
Joan:
Když se nad tím skriptem zamyslím, tak mě napadá, že by se vlastně kód ze začátku funkce pocitej() dal přesunout do funkce spust() , protože je potřeba jen při stisknutí tlačítka spusť a proměnná k s podmínkou pak nebude vůbec potřeba.
|
||
Joan Profil |
#20 · Zasláno: 20. 10. 2010, 23:24:22
Davex:
"a proměnná k s podmínkou pak nebude vůbec potřeba" No ale jak potom odliším proměnnou c, která má za úkol se odečítat a proměnnou k, která pouze zachytí zadané sekundy předané proměnnou c a staticky se zobrazuje v nejhornějším políčku? |
||
Keeehi Profil |
#21 · Zasláno: 20. 10. 2010, 23:49:10
Nějak se v tom tvém kódu nemohu vyznat, proto jsem ho celý přepsal. Tento kód funguje opakovaně i bez refereshe. Omlouvám se za IDčka, ale nějak mě nenapadla vhodná pojmenování.
<span id="a"></span> <span id="b"></span> <input type="text" id="zadani"> <span id="ovladani"><a href="#" onclick="spustit();">Spustit</a></span> <a href="#" onclick="zastavit();">Zastavit</a> <script type="text/javascript"> <!-- var cas; var budik; function spustit(){ cas=document.getElementById("zadani").value; document.getElementById("a").innerHTML="Konec za "+cas+" sekund."; document.getElementById("b").innerHTML="Bylo zadáno "+cas+" sekund."; document.getElementById("ovladani").innerHTML="<a href=\"#\" onclick=\"pozastavit();\">Pozastavit</a>"; cas--; budik=window.setInterval("odpocitavani()",1000); } function pozastavit(){ window.clearInterval(budik); document.getElementById("ovladani").innerHTML="<a href=\"#\" onclick=\"pokracovat();\">Pokračovat</a>"; } function pokracovat(){ budik=window.setInterval("odpocitavani()",1000); document.getElementById("ovladani").innerHTML="<a href=\"#\" onclick=\"pozastavit();\">Pozastavit</a>"; } function zastavit(){ window.clearInterval(budik); document.getElementById("ovladani").innerHTML="<a href=\"#\" onclick=\"spustit();\">Spustit</a>"; document.getElementById("a").innerHTML=""; document.getElementById("b").innerHTML=""; } function odpocitavani(){ if(cas<=0){ window.clearInterval(budik); document.getElementById("a").innerHTML="Odpočítávání dokončeno."; // akce co se mají provést po dokončení odpočítávání alert('baf'); } else{ document.getElementById("a").innerHTML="Konec za "+cas+" sekund."; } cas--; } //--> </script> |
||
Joan Profil |
#22 · Zasláno: 21. 10. 2010, 10:42:26 · Upravil/a: Joan
Keeehi:
Děkuju Ti! Natáhla jsem si Tvůj kód do svého malého Asuse a vyzkoušela. Je pravda, že Tvůj kód funguje, jak potřebuji. Místo F5 se musí použít funkce Zastavit, aby se skript resetoval, ale to nevadí. Já jsem měla ve skriptu setTimeout (protože to tak napsali první rádci), Ty používáš setInterval. Kolikrát bych podle své "logiky" zvolila ten druhý, než znalec použil a ono by to fakt nefungovalo správně. Je prosím Tě nějaká univerzální a nevyvratitelná rada, kdy použít setInterval a kdy setTimeout? A hlavně proč ten který? Díky! EDIT: Tak jsem se s tím poprala a zjistila jsem velezásadní věc: - ve Tvém skriptu se časová hodnota zadává do inputu (jinam to ani nejde), ale oproti mému původnímu řešení to počítá jinde, takže odpadá problém s přenosem proměnné do místa, kde se má staticky zobrazovat. To je bezvadné řešení, tím jsi mi moc pomohl. Já jsem si Tvůj skript poněkud oškubala, protože přerušení běhu skriptu při tomto konkrétním použití neuživím (voda bude vařit furt, bez ohledu na skript), takže i v tomto případě se musí kliknout napřed "Zastav", aby se mohlo počítat odznova. Jinými slovy: potřebovala bych skriptu nějak říct, že dojetí až na nulu se má chovat stejně jako stisknutí tlačítka "Zastav". Taky jsem si všimla, že pokud odklepnu prázdné políčko, tak se začne počítat do mínusu - toto zase můj původní skript nedělá a zarazí se. Jo a běhá to se zvukem jenom v IE, v ostatních prohlížečích mi vyskakoval problém s nepřehráváním (Firefox) nebo naopak s automatických přehráním hned po onloadu (Opera). Nicméně jsem zase o chloupek chytřejší, jen bych velmi potřebovala víc osvětlit, kdy a proč použít setInterval a kdy zase setTimeout. |
||
Keeehi Profil |
#23 · Zasláno: 21. 10. 2010, 16:26:59
Joan:
„pokud odklepnu prázdné políčko, tak se začne počítat do mínusu“ Můj taky ne, ty jsi ho však změnila. Já mám: if(cas<=0) if(cas==0) „dojetí až na nulu se má chovat stejně jako stisknutí tlačítka "Zastav".“ Není problém v tu chvíli zavolat funkci zastavit. „kdy použít setInterval a kdy setTimeout“ Podle toho, co se ti hodí setTimeout - po zadané době, jednou provede danou akci setInterval - po zadané době provede danou akci potom čeká zadanou dobu a po uplynutí zase provede danou akci a pak zase čeká, provede, čeká, provede, … |
||
Witiko Profil |
#24 · Zasláno: 21. 10. 2010, 17:31:41
Joan:
„kdy a proč použít setInterval a kdy zase setTimeout“ http://diskuse.jakpsatweb.cz/?action=vthread&forum=8&topic=113256 |
||
Časová prodleva: 14 let
|
0