Autor Zpráva
Nikd0
Profil *
Ahoj,
mám script aby se obrázek načetl ještě před zobrazení a vždycky se objevuje alert Stack overflow at line: 0. Nevím co stím.

<img onload="nacitani(this, '<?php echo($orbázek); ?>');" ...>


function nacitani(obr, url) {
          obrazek = new Image();
          obrazek.onload = function () {obr.src=url;}; 
          obrazek.src = url;
        }
nevim
Profil *
Co to má být?
1. Onload atribut se používá jen u elementu body co já vím.
2. Proměnná s diakritikou není úplně nejlepší nápad
3. Podle toho co máš tady pleteš php a javascript dohromady!
4. atd...
Joker
Profil
Nikd0:
1. Pokud se části Javascriptu generují přes PHP a problém je v Javascriptu, bylo by lepší vložit kompletní skript vygenerovaný z PHP.

Jinak viz nevim:
1. Onload atribut se používá jen u elementu body co já vím.“ (pro úplnost, ještě může být u frameset)
2. Proměnná s diakritikou není úplně nejlepší nápad“ - a ještě navíc s překlepem
3. Podle toho co máš tady pleteš php a javascript dohromady!“ - no tohle nemusí být pravda, ale viz výše, lepší bude kód s už zpracovaným PHP.
Radek9
Profil
nevim:
Všechno blbě. ;-)
1. U body a img (Edit: A vlastně i u framesetu, jak psal Joker)
2. V PHP to není problém
3. To taky není problém, pokud ti to nevyhodí např. apostrof nebo uvozovku
Joker
Profil
Radek9:
V PHP to není problém
Přesto bych nepojmenovával proměnné s diakritikou. I když v tomhle případě bude spíš zajímavé co je uvnitř té proměnné.
Nikd0
Profil *
K té proměnné, to sem blbě napsal sem, ve stránce to je $obrazek. A script funguje až na tu hlášku.
Dělám fotogalerii a tady se budou načítat náhledy všech fotek, takže sem to měl napřed že se ten script vloží ke každým řádku a údaje se doplní přímo do scriptu přes php,a le i tak to psalo tu hlášku, takže je jedno jestli má každej obrázek tu funkci přímo pro sebe nebo je takhle.

<img onload="nacitani(this, 'fotky/37_nahled.jpg');" src="img/notloaded-icon.jpg">

<script>
    function nacitani(obr, url) {
      obrazek = new Image();
      obrazek.onload = function () {obr.src=url;}; 
      obrazek.src = url;
    }
</script>
Tori
Profil
Nikd0:

Jen bych se chtěla zeptat: co se pak stane s tím novým obrázkem (proměnná obrazek), když ho vytvoříte - zůstane v paměti? A nezacyklí se to tou anonymní funkcí? Možná jsem to špatně pochopila, ale připadá mi, že to funguje takto:

- načte se obrázek1, zavolá nacitani()
- vytvoří se (v paměti?) nový obrázek2, ale nic se s ním dál neděje. Zároveň se původní obrázek1 dá znovu načíst
- tím se znovu spustí nacitani(), v paměti se vytvoří obrázek2b, znova se načte obrázek1
.... a tak dokola.
Nikd0
Profil *
Na tom něco je,.... A ještě jak to vyřešit :D
Davex
Profil
V celém kódu vidím jeden velký problém - pokud bude mít někdo vypnutý JavaScript, tak se mu nic nezobrazí.

Krom toho to vypadá, že tento kód skončí nekonečnou rekurzí a nedivím se tomu, že prohlížeč protestuje. Tato úprava by mohla pomoci:
function nacitani(obr, url) {
      var obrazek = new Image();
      obrazek.onload = function () {obr.onload=null; obr.src=url;}; 
      obrazek.src = url;
    }
Nikd0
Profil *
Jo, funguje to. Díky moc :D
Tori
Profil
Davex:
Co se stane s tím obrázkem v proměnné obrazek? Omlouvám se za začátečnický dotaz, ale pořád nějak nerozumím, nač ho je vlastně třeba.
Davex
Profil
Tori:
V mém kódu se obrazek po skončení funkce zahodí (protože je to lokální proměnná), ale obrázek zůstane v keši prohlížeče o což asi šlo - načíst celý obrázek do keše a v cukuletu zobrazit.

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: