Autor Zpráva
Radek Hrabůvka
Profil
Zkusil jsem napsat skrytí obrázku po určitém čase, ale obrázek se nezobrazí vůbec, poradíte, co mám špatně?
<img onLoad="setTimeout(style.visibility = 'hidden' , 1000)" src="images.png">
PerToon
Profil
Jednak by mělo být <img onLoad="setTimeout(this.style.visibility = 'hidden' , 1000)" src="images.png"> a druhak by být časovaný příkaz v uvozovkách.
Radek Hrabůvka
Profil
Upravil jsem kód a obrázek se vůbec nezobrazí, je to furt stejné, ať je doba u uvozovkách, nebo ne:
<img onLoad="setTimeout(this.style.visibility = 'hidden' , '1000')" src="image.png">
Jim
Profil
Zkus tomu nadřazenému přidat visibility='visible'
PerToon
Profil
Jejda, špatně sem se vyjádřil. Ne čas v milisekundách, ale ten vlastní příkaz má být podle ěm v uvozovkách.
habendorf
Profil
<script>
function schovej()
{
document.getElementById("nevolte-socany").style.visibility="hidden";
}
</script>

<img src="images.png" id="nevolte-socany" onload="setTimeout(schovej,'1000')" />
habendorf
Profil
Ještě mi nedá jedna otázka - proč asi tak 90% lidí píše onLoad, onClick atd.?
Sice to funguje, ale události se v JS zapisují malými písmeny. onclick, onload, onmouseover...
Radek Hrabůvka
Profil
Tuším že mám špatně uvozovky, zkouším vše možné a pak se obrázek objeví nafurt, nebo vůbec.
habendorf
Profil
Radek Hrabůvka: já ten svůj kód testoval, funguje :o)
Radek Hrabůvka
Profil
habendorf Viděl jsem to u Yuhůa, http://www.jakpsatweb.cz/javascript/udalosti.html
Jinak tvůj kód funguje 100%, jenom nechápu, jestli mám něco špatně, nebo je to nesmysl, proto mi to nechodí.
habendorf
Profil
Radek Hrabůvka:

citace z http://www.jakpsatweb.cz/javascript/casovani.html :

Akce je libovolný příkaz JavaScriptu. Musí být v uvozovkách, jinak se provede hned. Doporučuji tam zapisovat pouze jméno funkce, protože JavaScript v tom zápisu nepozná lokální proměnné.
Radek Hrabůvka
Profil
habendorf Díky za odkaz. Musím se hódně učit.
Yuhů
Profil
Ten podstatný problém je ten, že v setTimeout můžeš spouštět jenom globální proměnné. setTimeout je nezávislý na tom, kdo ho spustil, a proto tam nefunguje objekt this!

Takže řešení je takové, že si musíš ten objekt this (nebo jeho podobjekt) uložit do globální proměnné a teprve tu měnit přes setTimeout.

Jinak syntaxe setTimeout je následující. Bacha na ty uvozovky:

setTimeout("prikaz",čas);

Těmi uvozovkami se obaluje celý příkaz. Pokud jsou v něm samotném uvozovky, musí se zaescapovat, např. takhle: \" \"
Anonymní
Profil *
Málo známou věcí je, že funkci volané uvnitř setTimeout/setInterval jdou alespoň v Mozille předávat argumenty:
setTimeout(schovej, 1000, this)
Funkce function schovej(strašidlo){ ... } by se pak k onomu this mohla přistupovat skrze strašidlo.

Microsoft bohužel třetí argument časovaných funkcí využil k určení jazyka, v němž je první argument napsán. Což má sice také nějakou svoji logiku, ale pramalé využití.
Chamurappi
Profil
- tak to jsem psal já. Zapomněl jsem, že na tomto počítači nejsem přihlášen.
peta
Profil *
habendorf
"Ještě mi nedá jedna otázka - proč asi tak 90% lidí píše onLoad, onClick atd.?"
Zalezi na tom, podle jake normy. V 90% pripadu, pro transitional i ruzne programy pouzivaji onLoad="" , je to takove hezci.

Co se tyce uvozovek, tak myslim, ze je mas spatne a funguje ti to zcela nahodou. (totez tvrdim treba o windows)
onload="setTimeout(schovej,'1000')" />
spravne bys je mel mit u funkce ne u casu, aspon podle te normy, podle ktere se rika, ze mala pismenka...:
onload="setTimeout('schovej',1000)" />

Mimochodem, nedavno sem poresil preload obrazku, funkce. Mozna to nekdo psal, nekde, necet sem, ale potreboval jsem zobrazit hlasku cekejte.
Napadlo mne spasne reseni, sem si vzpomnel, ze timeout() jsou scriptove nezavisle, tak jsem tu hlasku pustil na casovani. (Original script mam trosku jinak, tam mam celou funkci v timeout, kdyby nahodou nestacilo hodit jen tu hlasku)

timerID=window.setTimeout("ukazwait()",222)
casoveDlouhyScript()
schovejwait()
Chamurappi
Profil
Reaguji na veš:
Zalezi na tom, podle jake normy. V 90% pripadu, pro transitional i ruzne programy pouzivaji onLoad
Absurdní. V HTML nezáleží na velikosti písmen, v XHTML je vše malé. Strict a Transitional se neliší.

Co se tyce uvozovek, tak myslim, ze je mas spatne a funguje ti to zcela nahodou
První argument je buď řetězec, který se má vyhodnotit, nebo identifikátor funkce (= nesmí být řetězec), která se má zavolat. Druhý argument je číslo, ale díky implicitní typové konverzi by nemělo záležet na tom, jestli je zapsán jako řetězec.
Mimochodem, kdyby byl dotyčný zápis skutečně špatně, byla by to velmi divná náhoda. Taková až moc pravidelná.

spravne bys je mel mit u funkce ne u casu, aspon podle te normy, podle ktere se rika, ze mala pismenka
Absurdní. Ta norma, která říká (nebo by říkala) cosi o velikosti písmen, je normou značkovacího jazyka. JavaScript se touto „normou“ neřídí, norma JavaScriptu (zvaná ECMAScript) je úplně mimo kompetence W3C. Naštěstí. Specifikace ECMAScriptu je dosti exaktní, nedělí se na Strict a Transitional, nebyla v době vydání zbytečně nekompatibilní s prohlížeči. Proto má v nejrozšířenějších prohlížečích již mnoho let takřka stoprocentní podporu.

Chceš-li se ohánět normami, čiň tak tehdy, až je budeš alespoň trochu znát.
peta
Profil *
Chamurappi
ses vedle, jak ta jedle, mladej

- jednak transitional povoluje onLoad
- druhak
PP: „spravne bys je mel mit u funkce ne u casu, aspon podle te normy, podle ktere se rika, ze mala pismenka“
CH: "Absurdní. Ta norma, která říká (nebo by říkala) cosi o velikosti písmen, je normou značkovacího jazyka. "
A o 5 radku vys rikas, ze tva norma rika, ze onload ma byt vzdy malymi.
Toz si vyber, ju?
Tam machroval s normou, tak jsem mu chtel pouze rici, a si nemysli, ze to nevim o automaticke konverzi, ze ten prvni retezec by mel podle stejne JS normy (vidis tam nekde v3c?), o ktere mluvil

HA: "Sice to funguje, ale události se v JS zapisují malými písmeny. onclick, onload, onmouseover..."

, mit v apostrofech, protoze se provadi oblibeny prikaz EVAL, oproti tomu u toho cisla je to zbytecne, prave kvuli te konverzi. Ale o konverzi vi, proc bych mu to rikal, ze jo?
Chamurappi
Profil
Reaguji na veš:
jednak transitional povoluje onLoad
HTML povoluje onLoad, XHTML nikoliv. Rozdělení Strict a Transitional s tím souviset ani nemůže. Vyzkoušej si, že podle HTML 4.0 (Strict) je onLoad naprosto OK, zatímco podle XHTML 1.0 Transitional je to neznámý atribut.

A o 5 radku vys rikas, ze tva norma rika, ze onload ma byt vzdy malymi.
Má norma? Žádná není má. Zatím :-)

si nemysli, ze to nevim o automaticke konverzi [...] Ale o konverzi vi, proc bych mu to rikal, ze jo?
Vycházel jsem z tvých slov: „spravne bys je mel mit u funkce ne u casu“ -- pakliže víš, že o konverzi oba víte, proč tato formulace?

[...] podle stejne JS normy (vidis tam nekde w3c?), o ktere mluvil
Dobrá. V souvislosti s Habendorfem jde o DOM, což ale není JS norma. Je to jen specifikace objektového modelu. Ta se také nedělí na Strict a Transitional. V DOMu neexistuje onLoad nikdy.

ze ten prvni retezec by mel podle stejne JS normy, o ktere mluvil Habendorf, mit v apostrofech
Ne. On totiž DOM nedefinuje objekt window. Na setTimeout není zatím žádný standard, lze vycházet jen z dokumentace prohlížečů. A ta zpravidla praví, že první argument je buď řetězec, který se vyhodnocuje něčím, jako je v JS eval(), nebo samotný identifikátor funkce, která se volá něčím, jako je v JS call(). Takže setTimeout(schovej, 1000) je stejné jako setTimeout("schovej()", 1000).
Toto téma je uzamčeno. Odpověď nelze zaslat.

0