Autor Zpráva
hondziiikh
Profil *
zdravíčko, trochu se trápím s formem, kde po onDblclick na
<input type="text">
vypíše do formu aktuální čas (klidně klienta). Vyřešil jsem to pomocí PHP, ve kterém netápu zdaleka tolik, jako v jscript :)
Jenže problém, který jsem si později uvědomil, je v tom, že mi tam dá čas načtení stránky, nikoli čas onDblclicku.. To znamená, že když načtu stránku ve 14:11 a onDblclicknu na input v 18:30, tak se mi tam nacpe 14:11..
Ukázka s PHP
<input type="text" name="datum" value="" onDblclick="this.value='<?php echo date("H:i.s");?>'" />

Došlo mi už, že PHP zde asi nemá co dělat :) můžete někdo prosím poradit jak to tedy udělat s javascriptem? Zkoušel jsem všemožné čuňačiny s časem(odpočty, hodiny, apod) co jsem kde vysosal z googlu, ale jak tomu jscriptu nerozumim, tak mi to pak nehraje dohromady :) Děkuji j
Witiko
Profil
Tak zaprvé, JScript != Javascript.
Jinak by možná pomohlo počíst si o objektu Date.

Výsledek by mohl vypadat nějak takto:
<input type="text" name="datum" value="" ondblclick="var now = new Date();this.value=now.getHours()+\":\"+now.getMinutes()+\".\"+now.getSeconds();" />
hondziiikh
Profil *
Tak to mi nefunguje :( Ať klikam doubleklikam nebo se třeba stavím na hlavu, tak to nic nedělá :( s tím jscript jsem si nějak neuvědomil existenci dalšího jazyka :) tak se omluvuju :)
Darker
Profil
No jen tak mimochodem, můžeš pomocí PHP do stránky vložit aktuální čas, a pak ho počítat pomocí setInterval.
Např:
var time={sekundy:1*"<?echo Date("s")?>",minuty:1*"<?echo Date("i")?>",hodiny:1*"<?echo Date("G")?>",};
setInterval("time.sekundy++;if(time.sekundy==60){time.minuty++;time.sekundy=00;if(time.minuty==60){time.minuty=0;time.hodiny++}}",1000);
panther
Profil
Darker:
ten tvůj příklad nebude fungovat minimálně z toho důvodu, že jsou v něm špatně uvozovky, když už nic jiného.
Witiko
Profil
Darker:
Na něco podobného jsem zde před časem posílal hotové řešení.
hondziiikh
Profil *
Pozor, nejde mi o aktualizujici se čas.. potřebuju prostě po dvojkliku aby se do inputu dostal cas a ten tam byl. uloží se posléze spolu s ostatními inputy.. V podstatě moje ukázka [#1] funguje, ale ne s aktuálním časem ale s časem načtení str. To bych zvladl, ale ne s aktuálním :) a jestli je to klientský, nebo serverový je mi jedno, zase to nemusí být přesné v ms, a vlastně ani v s :)
hondziiikh
Profil *
Aha! Moment, tohleto funguje [#2] Witiko .. panther má pravdu, po opravě uvozovek to jede jak má :) celkem kód:
<input type="text" name="datum" value="" ondblclick="var now = new Date();this.value=now.getHours()+':'+now.getMinutes()+'.'+now.getSeconds();" />
Tak skvěle :) se zbytkem si už snad poradím :) Děkuji moc :)
hondziiikh
Profil *
pravda nevím, jestli tyto uvozovky jsou ok, ale frčí to, tak to tak nechám. Kdyby to jinak bylo správněji (a fungovalo :) ) tak to prosím poopravte pro generace budoucí :) Moc díky ještě jednou
Witiko
Profil
Moment, tohle mě zajímá. Atribut HTML elementu je textový řetězec. Uvnitř jeho definice v těle dokumentu nelze escapovat symboly? Většinou definuji eventy rovnou přes řídící script, tak jsem neměl zatím moc potřebu tohle zkoušet.
Chamurappi
Profil
Reaguji na Witika:
Atribut HTML elementu je textový řetězec.
Je to především atribut, jeho obsah se řídí syntaktickými pravidly HTML, nikoliv syntaktickými pravidly JavaScriptu. HTML parser prohlížeče neví, že zrovna tento atribut poslouží JavaScriptu.

Uvnitř jeho definice v těle dokumentu nelze escapovat symboly?
Lze — podle HTML pravidel. Takže uvozovky můžeš nahradit entitami. (V atributech se na rozdíl od <script>ů interpretují.)
Darker
Profil
panther:
nebude fungovat
O co se vsadíme?
Witiko
Profil
darker:
Přetypovávat řetězec tak, že ho vynásobíš 1 je sice celkem hnus, ale fungovat ti to bude. Na přetypování tu máme parseInt(), Number(), ale hlavně ve svém případě vůbec přetypovávat nemusíš, jednoduše číslo navrácené php scriptem neobaluj uvozovkami.

No a potom samozřejmě eval řetězec v setInterval místo definice funkce (už jsem ti to opravovat tady).

Samotné přičítání - setInterval() si sice drží daný interval a i pokud spustí script s mírným spožděním, dodržuje dané časy. Problém je, že pokud nestíhá vůbec, tak v zájmu zachování intervalu může jednotlivá volání zcela vypustit (pokud nestihne za jednu sekundu script spustit) - tím by se ti pak čas postupně desynchronizoval.
Doporučuji namísto toho využít objektu Date() a čas navrácený php si definovat v javascriptu jako rozdíl oproti času klientského počítače a pak už jenom vykreslovat klientův aktuální čas upravený podle času serveru. Ucelené řešení jsem, jak už jsem říkal, posílal sem.

Chamurappi:
rozdíl od <script>ů
Můžu se zeptat jaký je zde BBkód pro inline zvýraznění syntaxe? :)

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: