Kezdőoldal » Számítástechnika » Programozás » Külső JS fájlból miért nem...

Külső JS fájlból miért nem fut le rendesen a script?

Figyelt kérdés

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?



2014. márc. 5. 13:52
 1/9 A kérdező kommentje:
Ja és nincs semmi hiba a konzolon...
2014. márc. 5. 13:54
 2/9 anonim ***** válasza:
Mi utal arra, hogy csak az első sor fut le, pontosabban, hogy az első sor lefut? Valószínűleg több kontextus kellene ahhoz, hogy segíteni tudjunk...
2014. márc. 5. 14:20
Hasznos számodra ez a válasz?
 3/9 A kérdező kommentje:
Az utal rá, hogy ha beteszek egy alert("valami szöveg");-et a for ciklus elé, akkor az alert lefut. De ha a for ciklusba teszem, ott nem fut le...
2014. márc. 5. 14:24
 4/9 A kérdező kommentje:
bocsánat... most teszteltem másképp, és lefut a for ciklus ha az i<elem.length helyére mondjuk csak i<3-mat teszek. Tehát azért nem fut le a for, mert valamiért az elem.length értéke 0. De ugyan ez a kód miért megy HTML-be ágyazva, és miért nem megy külső fájlként?
2014. márc. 5. 14:28
 5/9 anonim ***** válasza:

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.

2014. márc. 5. 14:37
Hasznos számodra ez a válasz?
 6/9 uno20001 ***** válasza:

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.

2014. márc. 5. 14:39
Hasznos számodra ez a válasz?
 7/9 uno20001 ***** válasza:
Megelőztek. :-(
2014. márc. 5. 14:41
Hasznos számodra ez a válasz?
 8/9 anonim ***** válasza:

:) 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; });

2014. márc. 5. 14:44
Hasznos számodra ez a válasz?
 9/9 A kérdező kommentje:

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!

2014. márc. 5. 14:52

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!