Külső JS fájlból miért nem fut le rendesen a script?
Ha HTML-be teszem ezt <script>-ek közé akkor gond nélkül lefut:
var elem=document.getElementsByClassName('productPrice');
for(var i=0; i<elem.length; i++) { elem[i].style.display='block'
alert (elem.length); //ez csak ellenőrzés, hogy lefut-e rendesen...
}
De ha már külső JS fájlban van pontról-pontra ugyanez a kód, akkor csak az első sor fut le. A for ciklusba már bele sem kezd. Ez miért van? És hogyan tudom megoldani?
Ez volt a gyanúm. Továbbra is fennálló probléma, hogy a szkript környezete nélkül elég nehéz megmondani, miért nem talál 'productPrice' osztályú tageket.
Tipp: alert(xy) helyett érdemes lehet a console.log(xy) megoldást használni, így nem szakadozik a szkript futása, a konzolon pedig megtekintheted a kimenetet.
Ha a <script src="akármi"> a <head> -ben van, akkor a szkripted még azelőtt lefut, hogy az oldal többi része betöltődne. Ezesetben természetes, hogy nem látja azokat a tageket, amelyek valójában csak később "kerülnek az oldalra". Bár régen bevett szokás volt, igazából ellenjavallott a <script> tageket a <head> -ben elhelyezni. Tedd inkább a <body> legvégére, vagy foglalj mindent függvényekbe, amelyeket csak a <body> végén elhelyezett szkriptből (vagy egy event handlerből) hívsz meg.
Valószínűleg az oldal head részébe tetted a script beágyazását. Az a probléma, hogy a böngésző, egyből miután letöltötte, megpróbálja futtatni.
De mivel ez a head részben van a "productPrice" osztályú elemeket még nem töltette le, így nem tud rá hivatkozni a JS, mivel azok a body-ban vannak.
Ez úgy tudod megoldani, hogy vagy teszel egy window.onload-ot elé, vagy a body legalsó sorában ágyazod be.
:) Ugyan, nem akkora katasztrófa.
A window.onload btw szintén nem jó, mert az is előbb fut, minthogy a document.readyState READY lenne.
A két általam ismert, bevett megoldás az általad is említett body-végi elhelyezés, valamint a jQuery általi $(document).ready(function() { blablabla; });
Köszönöm szépen a segítségeteket! Igazából működik mind3 javaslat amit mondatatok.
Kipróbáltam ezt: window.onload=function() {....};
Ezt: $(document).ready(function() {});
És végül a body végi meghívást is, és tökéletesen működik mind3. :)
Köszönöm még1X a segítségeteket!
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!