Autor Zpráva
srigi
Profil
Potreboval by som zafokusovat jeden element vo formulari po nacitani stranky. Bezne sa to robi tak, ze sa definuje volanie nejakej funkcie v elemente <body onLoad="... .

Ja toto riesenie nechcem pouzit a rad by som zafokusovanie presunul do externeho suboru .js, includovaneho v HTML hlavicke. Problem je, ze tento kod sa vykona este pred vykreslenim (vypocitanim) stranky, takze moj element neexistuje.

Je nejaka moznost ako vykonat udalost onLoad az po nacitani celej HTML stranky a mat pritom JS v hlavicke?

THX.
Holyday
Profil
"zafokusovat jeden element" - po tvém příspěvku jsem se rozhodl, že začnu sepisovat nějaký článek, kde budu uvádět, jak krásně dokážeme zacházet s češtinou, resp. slovenštinou. Bude tam i seznam podobných lahůdek :p Omlouvám se za "offtopic" :)
Chamurappi
Profil
Reaguji na srigiho:
Možnost určitě je (třeba přiřadit funkci k window.onload), ale na tvém místě bych raději nastavil focus hned po tom, co se načte příslušný element. Událost onload se vyvolává po načtení HTML kódu a všech <img> obrázků, což může být pozdě — uživatel už v tu chvíli může chtít podniknout něco jiného, začít psát do jiného místa atd.

Cpát naprosto všechny skripty do externích souborů není vždy efektivní. Tuto „chorobu“ přenášejí kodéři, kteří si myslí, že <script> uvnitř <body> je stejné zlo jako atributy style či prezentační elementy a že jejich stoprocentním vystrnaděním mimo tělo si usnadní práci stejně, jako se to daří se stylopisy. Skutečnost je taková, že externí skript v <head> má naopak zbytečně svázané ruce a hodí se nanejvýš na přednačtení funkcí, které se volají později při načítání.
peta
Profil
Chamurappi
pan chytry promluvil a hned zkritizoval lidi jako ja :)
Tagy script a style do body nepatri.
Parametry style do doby tez nepatri.
CMS systemy resi spoustu veci pres tagy script, treba prave zmineny focus nebo treba script pro zobrazeni kalendare. Spoustu uprav resi pres parametry style="" . Proti tomu nic nemam, protoze to ovlivnit nemuzes. Ale do ciste stranky mimo CMS bych takovych veci daval co nejmene.

srigi
Pokud nebude fungovat window.onload, muzes zkusit pridat onload na body a nebo zkusit casovac dotazujici se na existenci elementu a spoustejici sama sebe, dokud se mu to nepodari, co mas v umyslu.
Leo
Profil
Vicemene souhlas s Chamurappim, pokud generuju stranky v php v nejakem vlastnim generatoru, a to delam prakticky vzdycky, tak davam primo do stranky script hned jak je potreba. Proc taky ne, usetri se zbytecny http dotaz na server, externi js soubory volim jen na veci, ktere se pouzivaji na strankach opakovane. Leo
centi
Profil
peta
Tagy script a style do body nepatri.
Ale? To je mi novinka. A prečo by tam script nepatril? Jednak to špecifikácia (na rozdiel od <style>) dovoluje, ale hlavne často je to i žiadúce. Externé skripty (knižnice; súbory s funkciami, ktoré sa používajú až po načítaní stránky a pod.) patria práve do <body> ako jeho posledné elementy, aby requesty na ich stiahnutie zbytočne nebrzdili načítanie stránky.
Chamurappi
Profil
Reaguji na peta:
Tagy script a style do body nepatri.
<style> nepatří (byť funguje), <script> patří a je zcela přirozený.

Parametry style do doby tez nepatri.
Já mluvil o atributech style uvnitř <body>, ne o parametrech style v době. A bylo to jen přirovnání užité k objasnění pravděpodobných motivů. Z praktických důvodů atributy style nepoužívám, elementy <script> v <body> ano (pokud si můžu vybrat). Má to i tu (drobnou) výhodu, že návštěvník s pomalejším připojením nečučí při první návštěvě minutu na bílou stránku (viz Na co stránka čeká).

Pokud nebude fungovat window.onload, muzes zkusit pridat onload na body
Pane nepozorný, kolega srigi se chce odvolávat na externí skript v hlavičce, v té době ještě neexistuje <body>. Pokud vím, tak window.onload funguje vždy.
peta
Profil
Vzdyt jsem to psal. V podstate v CMS neni na vyber. Tam se treba resi vkladani kodu pro login a tam by bylo slozitejsi resit focus na loginm policko pres externi JS, tam to tez resim v jednom.
Ale pak je HTML kod zaneradeny zbytecnym kodem, ktery zhlediska obsahu stranky nic neresi.
Navic, vlozeny script do stranky typu pocitadlo prave zpusobuje zminene zastaveni stranky, viz nejaky priklad na jakpsatweb, kdy se ceka na odkliknuti alert hlasky (nebo podobne) a pak se teprve neco zobrazi. Si myslim, ze lepsi pockat 1s na nacteni externiho nez 10s, nez si uzivatel uvedomi, ze treba kliknout a pak se vydesi, ze se stranka zmenila a zacne ji celou prochazet znova, kde se co zmenilo...
Ano, specifikace to umoznuje. A? Jaky to ma vyznam z hlediska obsahu? Co neovlivnuje obsah, at tam pokud mozno v html kodu neni. To je moje pravidlo, kterym se ridim.

Chamurappi Ja jsem si to cetl, jak to zamysli a souhlasim s tim, aby to tam dal, ale nepatri to do stranky a pokud mozno bych se takovym situacim vyhnul.
Bubák
Profil
peta
To je moje pravidlo, kterym se ridim.

Nakažený a šíří chorobu.
Měsíček
Profil
Vždyť se tím pete taky neřídíš ;-) ..
srigi
Profil
OK, takze som to vyriesil najjednoduchsie ako som mohol - pridal som JS k HTML kodu formulara. Islo o to, ze mam jednu sablonu "default" pre vsetko. Malinky snipet:
<html>
<head>
 <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
 <title>{tag:title /} :: Pacato</title>
 <link rel="stylesheet" type="text/css" media="screen" href="public/styles/main.css" />
 {tag:jscripts /}
</head>
<body>
<div id="wrapper">
  <div id=header>
    <a href="{tag:homelink /}">Pacato<span id="healf"></span></a>
  </div>

  <div id="content">
  <div id="contentContent">
    {tag:content /}
  </div>
  </div>

  <div id="footer">...</div>
</div>
</body>
</html>

A ja som potreboval dynamicky natahovat JS podla PHP. V PHP backende sa rozhodne aky JS sa do sablony natiahne. Nekcel som sablonu nejako rozsirovat, tak som nakoniec pridal potrebny JS ku HTML kodu, ktory sa vysype do {tag:content /}.

peta na vrhoval casovac, to mi pride ako srabanie sa lavou rukou za pravim uchom. Vyskusal som to, ale nakoniec som tuto metodu opusitl - pridanie JS k HTML kodu formulara nesie mensi overhead.
peta
Profil
Měsíček
Objevil jsi ameriku, priklad z jakpsatweb o kterem jsem psal. Stacilo si to jen precist. Ach, jak jsi genialni.

srigi
To jsem navrhnul dalsi mozne reseni, ktere by mohlo fungovat. Az budes nekdy resit podobny problem a zjistis, ze uz nejaky jiny JS ti zaplacava window.onload , pak se ti to treba bude hodit.
Měsíček
Profil
Reaguji na peteho:

"Objevil jsi ameriku, priklad z jakpsatweb o kterem jsem psal. Stacilo si to jen precist. Ach, jak jsi genialni. "

Pokud vím tak na tvém webu měli být "opravené či upravené" příklady z JPW :-) proto mi to jaksi nezapadalo do tvého výroku - jinak jestli chceš (možná) dám si tu práci a najdu ti skript, který je čistě tvůj a tvým výrokem se neřídí ..
Chamurappi
Profil
Reaguji na peta:
Co neovlivnuje obsah, at tam pokud mozno v html kodu neni. To je moje pravidlo, kterym se ridim.
Většina tvých stránek, na které odkazuješ, má <script>y přímo v <body>. Netřeba chodit daleko, viz http://www.volny.cz/peter.mlich/www.htm

a zjistis, ze uz nejaky jiny JS ti zaplacava window.onload , pak se ti to treba bude hodit
Zavolá-li svoji funkci přímo ze stránky, nemusí ho zaplácnutý onload trápit. (Krom toho jsou i jiné způsoby, jak události zachytávat.)


Reaguji na Měsíčka:
na peteho
To je podle jakého vzoru? Peta se skloňuje jako pán.
peta
Profil
Chamurappi
Nebo predseda? nebo jaky jiny?
Petr bez Petra? S Petrem, s panem?
Peta bez Peti? S Petou, s predsedou, s panem?
Co treba zkusit cestinare?
Chamurappi
Profil
Reaguji na peta:
Ty jsi psal, že se skloňuješ jako pán. Já tvůj vzor tudíž respektuji, pete.
Bubák
Profil
peta
ja bych mlcel. peta = pan, petovi = panovi
To jsem se dozvěděl od pety.

Petr bez Petra? S Petrem, s panem?
Peta bez Peti? S Petou, s predsedou, s panem?
Co treba zkusit cestinare?

Na tyto OT dotazy si založ vlastní vlákno.

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:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0