Autor Zpráva
Kadel
Profil
<img src='checkupdate_img.php' id='checkupdate' alt='' onload='imgcheck()'>


html validator mi hlasi ze atribut onload tam nechce...pouzivam HTML 4.01 Transitional
muze nekdo poradit jak nejlip obejit ten atribut, nebo nejaky jiny napad? dik
WanTo
Profil
Kadel
Proč atribut obcházet? Abys uspokojil validátor? Ne, ty potřebuješ uspokojit prohlížeče a uživatele.
Kadel
Profil
zvlastni nazor :)
ja nechci uspokojovat validator ja chci mit validni - spravny - html kod
WanTo
Profil
Kadel
Validní kód neznamená správný. Ani naopak. Důležité je, aby všude fungoval, pokud možno stejně.

Funguje tvůj kód ve všech prohlížečích? Ano? Tak už se o validitu nezajímej, není důležitá.
peta
Profil *
Kadel
Validita neni podstatna v pripade, ze nemas jinou chybu a program ti funguje spravne ve svech prohlizecich, ktere pouzivaji tvy zakaznici.
Ona validita totiz muze poresit mnozstvi problemu (JS CSS) se spatnymi tagy, ale nevyresi problem, kdyz nejaka norma nepovoluje onload a jina zase ano a funguje to.

Jestli to chces poresit validne, pak by bylo fajn dat:
<script>
objGet("checkupdate").onLoad="imgcheck()";
</script>
Ale to mi prijde dost krkolomne, takze bych asi pouzil jen
<script>
imgcheck();
</script>

Otazka je, jaky to ma ucel, jestli chces pri nacitani obrazku zobrazovat nejaky prubeh, tak to druhe reseni neni nic pro tebe.
Kadel
Profil
ucel je takovy ze pri kazdem nacteni obrazku se zavola fce imgcheck() ktera nastartuje nacteni jineho obrazku (dalo by se to prirovnat ke slideshow ikdyz to neni presne muj pripad)
nejspis pouziju tohle:
objGet("checkupdate").onLoad="imgcheck()"; 


diky
WanTo
Profil
Kadel
A proč prostě nepoužiješ zápis, který jsi měl dřív (a fungoval ti)? Pak budeš vymýšlet, jak přechytrařit validátor, až nakonec zjistíš, že ti skript nefunguje v polovině prohlížečů.

Vykašli se na validitu.
Chamurappi
Profil
Reaguji na Kadela:
Ten petuv skript ti nebude fungovat. On sice má bohatší praktické zkušenosti než všichni ostatní tady, ale pochází z jiné reality, kde platí úplně jiné zákonitosti (dost divné).
Správné přiřazení události skriptem vypadá takto:
document.getElementById("checkupdate").onload = imgcheck;
Ale jak píše WanTo, validita je k ničemu. Já osobně sice nikdy nepíšu zachytávače událostí přímo do HTML, ale zaostalá DTD od konsorcia mě k tomu nijak nemotivuje.
peta
Profil *
function objGet(x)
{return document.getElementById(x)}
Chamurappi
Spokojen? Ted uz jo?

Tvuj mu take nebude fungovat, protoze:
http://www.jakpsatweb.cz/javascript/udalosti.html
onload se pise s velkym L, pane chytry a zkuseny :))
Chamurappi
Profil
Reaguji na petu:
Fakt bys měl načerpat nějaké ty zkušenosti z naší reality, když už zde „radíš“. Událost onload se skutečně s velkým L nepíše. Ani s ním v žádném prohlížeči nikdy nefungovala. (Alespoň v té naší realitě. Jak je to u vás?)
Dmagician
Profil
Já osobně sice nikdy nepíšu zachytávače událostí přímo do HTML, ...

No vidis presne toto som chcel navrhnut aj ja ale bol som lenivy odpovedat...

Inline javascripty su dalsi neduh ktory do html kodu nepatri.. ci uz je to z hladiska validity (na ktorej ti nezalezi) ale aj z hladiska pristupnosti.. web sa da spravit aj tak aby bol pouzitelny aj bez javascriptu a skript zavesit na elementy.. pripadne priamo zavesit obsluzny skript na udalost. Mimochodom, myslim si ze prave vdaka snahe niektorych menej skusenych webdesignerov o validitu sa takto dostanu aj k rieseniam ktore ich nutia zbavovavt sa takychto chorob. Samozrejme, nie vzdy sa to podari a najdu sa aj experti ktorych to pred pchanim inline javascritpu do kodu nezastavi...
WanTo
Profil
Chamurappi
Ještě existuje tuším nějaká metoda přiřazení ovladače události pomocí prvek.addNecoListener(). Je to vlastně napodobenina modelu událostí z AWT v Javě.

Máš s tím nějaké zkušenosti? Funguje tento způsob ve všech nejpoužívanějších prohlížečích (IE, Opera, KHTML, Gecko)?
Kadel
Profil
opravdu bych nechtel aby se tu zase peta a chamurappi hadali...ctu toho uz dost
ale stejne se chci zastat peti pac ja v posledni dobe taky pouzivam hojne fci getObj() takze sem to pochopil ;) a na validitu se opravdu vykaslat nechci ....mam rad sve stranky validni
Chamurappi
Profil
Reaguji na Kadela:
Na objGet() (nebo getObj()) není v zásadě nic špatného. V jeho odpovědi vadilo velké L a to, že přiřazuje řetězec.

Reaguji na WanTo:
Ano, existuje metoda addEventListener(). Nemám s ní zkušenosti, nezkoumal jsem, kde a jak funguje. Někde jsem tuším četl, že postupně přidané ovladače spouští různé prohlížeče v různém pořadí, ale nejsem si jistý, nerad bych mátl jako... někdo.
I na složitých webech mi většinou stačí vlastnost prvek.onudálost. Jediné místo, kde je trochu nešikovná, je onload. Tam to řeším jedním centrálním ovladačem, do kterého postupně přidávám různé inicializace vlastní metodou (i s určením priority) a on je pak po načtení všechny zavolá. Běhá to perfektně.
Dmagician
Profil
WanTo
addEventListener().


Co sa prehladu rozdielov medzi implementaciami v roznych prehliadacoch (plus vysvetlenia ako co funguje), www.quirksmode.org je celkom fajn

konkretne (aj) k addEventListener() je info tu:

http://www.quirksmode.org/dom/w3c_events.html

celkovo odporucam pouzivat stranku pravidelne.. moze ti pomoct vyhnut sa konstrukciam nefungujucim v prehliadacoch v ktorych nemas moznost testovat.
habendorf
Profil
Tvuj mu take nebude fungovat, protoze:
http://www.jakpsatweb.cz/javascript/udalosti.html
onload se pise s velkym L, pane chytry a zkuseny :))


A já pořád kde se to bere, že 90% lidí píše události blbě.
peta
Profil *
habendorf Tak ja to jako nepouzivam, nejake onload. Takze sory :)
Chamurappi mozna mas pravdu, no :) Jsem proste hodil odkaz na prvni stranku, co jsem nasel a vetsinou to tu byva dobre napsane, nea jak tvorbawebu nebo jak se to jsmenuji...
jx0
Profil *
Ponekud opozdene se vyajdruji k tematu, ale resil jsem podobny problem.

U me slo o iframe, u ktereho jsem chtel povesit funkci na udalost onload. Pokud jsem primo do html napsal <iframe id="..." ... onload="...">...</iframe>, tak se to validatoru nelibilo.

Zkousel jsem udalost onload nastavit pomoci javascriptu podle vyse uvedenych rad:


document.getElementById("...").onload = ...;


To fungovalo vyborne ve FF a Opere, ne vsak v IE. Pochopil jsem, ze pro IE musim zkusit neco jako document.frames["..."]..., ale stejne to neslo.

Neprisel jsem na to, proc to nejde, ale cele jsem to vyresil zpusobem, na ktery prilis hrdy nejsem, ale funguje a je validni:


<span id="iframe_wrap"></span>

document.getElementById("iframe_wrap").innerHTML = '<iframe id="..." ... onload="...">...</iframe>';


Toz tak.
Toto téma je uzamčeno. Odpověď nelze zaslat.