Autor Zpráva
wabi
Profil *
Zdravím,
mám ve stránce několik volání toho stejného externího skriptu (nevím dopředu kolik jich bude, může být jeden, ale může jich být i pět), co já potřebuju je, aby se ten skript provedl jenom jednou... mám schématicky následující situaci:

<div class="neco"></div>
<script src="skript.js></script>
..nějaký obsah...
<div class="neco"></div>
<script src="skript.js></script>
..nějaký obsah...
<div class="neco"></div>
<script src="skript.js></script>
..nějaký obsah...

A problém je v tom, že se ty skripty provedou hned jak na ně dojde řada a já bych potřeboval aby se nejdřív načetla celá stránka a potom až ty skripty. Jinak v nich totiž nemůžu nijak zjistit jestli jich je tam víc nebo ne (v nich bych potom ošetřil to, aby se nespustily vícekrát)

Budu rád za jakýkoliv nápad! Díky
_es
Profil
wabi:
No tak daj ten <script> až na koniec html kódu.
Prečo nedáš všetko potrebné len do jedného JS súboru?
ShiraNai7
Profil
Pomocí události window.onload
http://www.jakpsatweb.cz/javascript/udalosti.html#onload
wabi
Profil *
No to je právě ten problém - z principu projektu nemůžu do toho kódu stránky nijak zasahovat, nemůžu přidat do body událost onload, nemůžu ani umístit kód až na konec souboru :/
_es
Profil
wabi:
z principu projektu nemůžu do toho kódu stránky nijak zasahovat, nemůžu přidat do body událost onload, nemůžu ani umístit kód až na konec souboru :/
Tak akú radu potom chceš? Čo môžeš?
Ten „princíp projektu“ je nejaký divný.
Ten zdrojový kód je presne tak, ako si dal? Že je v dokumente viacnásobný odkaz na ten istý JS súbor?
Najlepšie je asi dať ten „projekt“ do normálneho stavu.

Jinak v nich totiž nemůžu nijak zjistit jestli jich je tam víc nebo ne
Viac čoho? Počet načítaných skriptov v dokumente sa zistiť dá.
wabi
Profil *
_es
Vážně to vzhledem k projektu dává smysl, ale nemá cenu to tady vysvětlovat.

Viac čoho? Počet načítaných skriptov v dokumente sa zistiť dá.
A můžu se tedy zeptat jak? Já jsem to původně chtěl dělat tak, že bych spočítal ty divy s class="neco", ale jestli jdou počítat rovnou skripty, tak by to bylo super!
_es
Profil
wabi:
A můžu se tedy zeptat jak?
Riešilo sa to tu: http://diskuse.jakpsatweb.cz/?action=vthread&forum=8&topic=126310
Ale ak ide len o overenie, či sa ten istý skript nespúšťa viac krát, tak to ide jednoducho overiť tak, že sa na začiatku skriptu overí premenná definovaná v tom skripte.
wabi
Profil *
no takhle to už dělám, ale problém je v tom, že já potřebuju zjistit počet těch skriptů už v tom prvním na stránce ne v tom posledním, tam už to jde snadno.
Proto bych potřeboval nějakej způsob, aby se ty skripty spustily až se načte celý html - něco jako je v jquery $(document).ready(function() { kód }
_es
Profil
wabi:
aby se ty skripty spustily až se načte celý html
Tak je to len jeden JS súbor skript.js, alebo je tých súborov viac?

Proto bych potřeboval nějakej způsob, aby se ty skripty spustily až se načte celý html
No ale na to si už radu dostal v [#3] ShiraNai7.
wabi
Profil *
[#9] _es
Je jenom jeden, jenomže se spustí vícekrát jelikož je na té stránce umístěn na více místech.
A radu jsem sice dostal, ale mě je k ničemu, už jsem psal že nemůžu použít událost onload
wabi
Profil *
Ještě jedna doplňujícíc otázka - když takhle načítám vícekrát stejný soubor, co se přesně s těmi duplicitními funkcemi v něm stane? - přepíšou se vždy novými a tak vlastně bude aktuální jenom ten poslední vložený a nebo tam budou jako by třikrát?
Já vím že na tom nezáleží, jenom z hlediska výkonu jak moc tohle zpomalí stránku?
_es
Profil
wabi:
už jsem psal že nemůžu použít událost onload
Prečo by si nemohol?
window.onload = function(){ľubovolný kód};
wabi
Profil *
[#12] _es
Ano tak jsem to právě zkoušel, ale mám tam v tomhle ohledu zkrátka překážky. Nevěděl by někdo jak je to s tím výkonem? - když budu mít na té stránce třeba třikrát ten stejný odkaz na script?
_es
Profil
wabi:
Ano tak jsem to právě zkoušel, ale mám tam v tomhle ohledu zkrátka překážky.
Aké prekážky?

Nevěděl by někdo jak je to s tím výkonem? - když budu mít na té stránce třeba třikrát ten stejný odkaz na script?
Záleží od toho, aký konkrétny ten skript bude - ako ho napíšeš. Na výrazné obmedzenie problému si už tiež dostal v [#7] radu.
wabi
Profil *
[#14] _es
Mě jde spíš o takový kód, který se nemusí třeba vůbec provést - v mém skriptu se jedná o deklaraci nějakého objektu a potom jeho zavolání. To zavolání ošetřím právě tou proměnnou, ale ta deklarace se načte vícekrát i když se přímo neprovede, ne? Že se vlastně vždycky přepíše ta původní deklarace, která byla načtena z přechozího volání skriptu a tak dokola?
Witiko
Profil
wabi:
Ano, deklarace se přepíšou. Paměťově by to tedy nemělo činit rozdíl, výkonově mírně, ale co se smyslu týče, tak ten to nedává. :-)
_es
Profil
Witiko:
Paměťově by to tedy nemělo činit rozdíl
To nie je až tak isté, stačí aby na predchádzajúcu rovnako nazvanú funkciu zostal nejaký odkaz.

wabi:
Prečo namiesto konštrukcie:
<script src="skript.js></script>
nepoužiješ radšej:
<script>funkcia();</script>
wabi
Profil *
[#17] _es
Protože se jedná o vygenerovaný skript se kterým bude zacházet třetí strana a tudíž musí být co nejjednoduší. Ale nakonec to asi udělám přes tu zmíněnou dynamicky generovanou událost onLoad, sice to bohužel není přesně ono, ale je to asi jediný způsob jak ten skript spustit až po načtení html.

[#16] Witiko
Díky za informace! :)

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:

0