- Android szakmai topik
- Kicsomagolták a Vivo X Fold 5-öt (videó és fotók)
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Honor Magic7 Pro - kifinomult, költséges képalkotás
- Samsung Galaxy Watch7 - kötelező kör
- Fotók, videók mobillal
- Samsung Galaxy A54 - türelemjáték
- Díjnyertes okosgyűrű érkezik júliusban
- Huawei Watch GT 3 Pro - korlátolt szépség
- iPhone topik
-
Mobilarena
JavaScript != Java (A JavaScript nem összekeverendő a Javával, két különböző programozási nyelvről van szó!)
Új hozzászólás Aktív témák
-
Sk8erPeter
nagyúr
-
Sk8erPeter
nagyúr
válasz
TheProb #5821 üzenetére
Azért, mert így nem írsz felül semmilyen másik, szintén onloadra bekövetkező eseménykezelőt, olyat, amit pl. akár egy másik fájlban határoztál meg (Te vagy akár egy library), hiszen így HOZZÁADSZ egy eseménykezelőt, mint az a nevében benne is van (addEventListener), nem pedig felülvágod az onloadot egy egyenlőségjellel, hogy az lesz az eseménykezelő, és kész, semmi más.
Vegyünk egy nagyon egyszerű példát:
A HTML-struktúrában ez a két fájl van behúzva:...
<script src="testjs-1.js"></script>
<script src="testjs-2.js"></script>
...testjs-1.js tartalma:
window.onload = function() {
alert("asdasd");
}testjs-2.js tartalma:
window.onload = function() {
alert("blabla");
}Ha mindkét fájlban meghatározott eseménykezelő fontos lenne, hogy lefusson a load esemény hatására, hát akkor szomorúan fogjuk tapasztalni, hogy bizony ez nem történik meg, csak a "blabla" felirat fog felpattanni, pedig elvártuk volna, hogy előtte az "asdasd" szöveg is vágódjon a pofánkba.
Most ha átírod így:
testjs-1.js tartalma:
window.addEventListener("load", function(event) {
alert("asdasd");
}, false);testjs-2.js tartalma:
window.addEventListener("load", function(event) {
alert("blabla");
}, false);Akkor innentől kezdve először felugrik az "asdasd", majd a "blabla" feliratú ablak. Pont ezt vártuk el, mindkét eseménykezelő lefutott.
A window.removeEventListener("load", load, false); sor pedig a jsFiddle-re felrakott példában azt jelenti, hogy eltávolítjuk az eseménykezelőt, hiszen ha már egyszer lekezeltük a betöltődés eseményét, akkor teljesen felesleges, hogy rá legyen aggatva egy eseménykezelő, mivel az esemény már bekövetkezett, nem fog többször bekövetkezni.
Még régebben az MDN oldalán láttam, aztán rászoktam a használatára, elméletileg így kevesebb erőforrást eszik a script. Általában egyébként elvileg elég jelentéktelen lehet az ebből adódó különbség, így egy weboldal esetében igazából nem biztos, hogy érdemes vele foglalkozni, hogy ez a sor szerepeljen egyáltalán a kódban, de egyébként alapvetően nem egészséges, ha feleslegesen sok listenert aggatunk fel ide-oda az alkalmazásunkban, ezért spórolok vele, hiszen minden listener azért kér némi erőforrást - így pl. egy böngésző esetén ha sok-sok bővítmény van telepítve, és mindegyik felaggatja a kis listenerjét, majd ott is marad, akkor az már elméletileg számíthat.A többi remélem érthető, kérdezz, ha nem tiszta.
-
Sk8erPeter
nagyúr
válasz
TheProb #5819 üzenetére
Gondolom a tanár elvárása volt, hogy feltétlenül a list itemekre hivatkozzatok (<li>), de egyébként igencsak kretén példa, mert itt bőven elég lenne a mainList azonosítóval rendelkező <ul> elemre beállítani a színt, és kész, ettől öröklődne a szín a gyerekelemekre is, nem kéne végigszaladgálni for ciklussal semmilyen listitem-tömbön minden alkalommal. A document.getElementById(...)-hívások eredményét is illik letárolni, amikor újból és újból hivatkozol ugyanarra az elemre, pont ugyanazok miatt, amit az előbb írtam.
Csak gyors átalakítással: https://jsfiddle.net/76218j80/2/
Szerk.: persze ez így egyébként még csúnya megoldás, mert néhány változó globális scope-ban elérhető, de most ilyen szempontokat elegánsan leszartam. -
Sk8erPeter
nagyúr
válasz
TheProb #5814 üzenetére
- Ahogy dqdb írta, itt pl. a színt előre el lehetne tárolni egy változóban, és azt a változót felhasználni minden alkalommal, mivel itt a cikluson belül nem változtatod, ergo értelmetlen mindig újból és újból összefűzögetni a stringet (mikrooptimalizáció, de az ilyen overheadek szépen egymásra tudnak rakódni, meg amúgy is igénytelenség nem figyelni a mikrooptimalizációra, ugyanígy nem hívogatunk egy metódust többször egymás után, hanem annak a visszatérési értékét is eltároljuk - már amennyiben persze nem változik a visszaadott érték menetközben).
- Stílust nem szép állítgatni JavaScript-oldalról, erről itt volt szó nemrég: [link] (1. bekezdés vonatkozik ide is). Persze kérdés, mi a cél. Ezt itt nem árultad el nekünk, hogy mit szeretnél csinálni, úgyhogy nehéz eldönteni, hogy ez a megoldás így elfogadható-e - pl. lehet olyan, hogy valami üzleti logika van mögötte, és a számított értéket kénytelen az ember JavaScriptben beállítani.
- Mi a cél azzal, hogy az oldalon az ÖSSZES list itemet beszínezed? Amúgy hallgass CSorBA kollégára, a szülőelemnek (<ul> vagy <ol>) add meg a színt egyszer, és kész - persze kivétel az, ha egy-egy elem színét felül szeretnéd bírálni, vagy explicite van bedrótozva a CSS-fájlba a list itemek színe.Na, szóval röviden írd le, mi a célod, és csak akkor tudjuk eldönteni, mi lenne rá a jó megoldás.
-
CSorBA
őstag
válasz
TheProb #5804 üzenetére
Ha debugban megnézted, akkor a konzolt is látnod kellene
TypeError: document.getElementById(...) is nullMéghozzá itt: aktCella = document.getElementById(i+j).value;
Egész egyszerűen nincs olyan id-jű elem a kódodban amit le akarsz kérdezni, ezért nincs neki value-je és ezért itt elhasal az egész. Ellenőrizni kellene az elem meglétét, mielőtt value-t kérdezel.
-
martonx
veterán
válasz
TheProb #5676 üzenetére
Bocsánat, azért nem válaszoltam a kérdésedre, mert olyan érzésem volt, mint amikor valaki bejelenti, hogy holnaptól matematikusként akar dolgozni, aztán meg megkérdezi a hallgatóságát, hogy amúgy 2 + 2 mennyi. Nem tudtam eldönteni, hogy ez most mi akart lenni. Bocsánat, máskor majd komolyabban veszem.
-
DarkByte
addikt
válasz
TheProb #5667 üzenetére
Mivel HTML kódhoz csak ritkán nyúlok így lehet nem írom pontosan, de
1) az img tagnél a magasságot tudtommal csak pixelben lehet megadni, nem százalékban. A magasság csúszka ezért nem csinál semmit
2) szerintem ha csak egyik tengely mentén van megadva a méret akkor az img alapesetben aránytartóan jeleníti meg a képet
3) mert a label p-k id-it összecserélted
4) ezt nem értem, nálam már 1 tizedes jegyig írja ki hogy mit választasz. Gondolom közben módosítottad a kódot -
inf3rno
nagyúr
válasz
TheProb #5645 üzenetére
Ha megnézted volna, a konzolt, akkor látszott volna benne, hogy a getElementById null-t ad vissza, ami meg csak azért lehet, mert rossz id-t adtál meg.
Ha most tényleg jól megy, akkor ez lehet az 1.0. Ha van kedved tovább fejleszteni, akkor javaslom, hogy ahelyett, hogy az input-okat járod be az ellenőrzésnél, csinálj 2d tömböt a tartalmukból, és azt járd be. Ez elsőre plusz munkának tűnik, de így közvetlenül a "model"-en tudsz dolgozni, és cserélni tudod, hogy honnan és hogyan olvasod be azt. Következő lépésnek be lehetne tenni egy olyan, hogy az input.onchange eseménynél olvasod be minden cellából az értéket, a 2d tömbödbe, ahelyett, hogy gombnyomásra tennéd ezt. Így a gomb teljesen feleslegessé válna, helyette minden változásnál futtathatnád az ellenőrzést automatikusan. Ez mondjuk lehetne a 2.0. Következő lépésnek betehetnél két táblázatot ugyanahhoz a model-hez, és az lenne a feladat, hogy szinkronban tartsd őket. Szóval ha az egyikben változik egy cella tartalma, akkor a másikban is változnia kéne, ez már egy komolyabb data binding, lehetne 3.0. Utána csinálhatnál olyat, hogy külön ablakban van a két táblázat, és úgy tartod szinkronban a cellák értékeit, ez lehetne 4.0. Nagyjából ennyi amit ki lehet hozni a témából. Gondolom egy kis fantáziával még képeket is lehetne generálni a számok alapján, stb.
-
martonx
veterán
válasz
TheProb #5639 üzenetére
Azért nem moccant meg a js-ed, mert ha onload-ot használsz a js kódod wrapperének, akkor az inline js eventnél nincs scope-on belül. Szóval megoldás lehetett volna, simán body-ba rakni a js-t, vagy header-be. Amúgy sem illik inline eventeket használni, úgyhogy átalakítottam, normális event bindingra, és meghagytam az onload-ot. Így legalább már megmoccan a js
Ránézésre egy rakás hibát látok benne, de így már el tudsz indulni. Ettől kezdve a feladatnak nulla köze a js-hez, szimpla programozás feladat bármilyen nyelven. Figyelj oda a kismillió hibádra, de direkt nem akarom a poénokat lelőni, vannak nagyon triviálisak is közöttük.Ja és a friss link: [link]
-
PumpkinSeed
addikt
válasz
TheProb #5635 üzenetére
Igazából teljesen mindegy mivel olvasod ki, megfelelő matematikai műveletek használatával az 1 dimenziós tömböt is fel tudod ugyan úgy dolgozni mint a 2 dimenziósat.
Amúgy ez így szerintem undorító, már megbocsáss (nem szoktam így fogalmazni). Sokkal szebb lenne, ha az inputokat is JS-el generálnád. appendChild vagy valami hasonló függvény az ami neked kell ehhez.
Ez az új JSFIDDLE nagyon jó lett, lazán lehet oktatásra is használni.
Új hozzászólás Aktív témák
Hirdetés
- Kerékpárosok, bringások ide!
- BestBuy topik
- Azonnali fáradt gőzös kérdések órája
- Mikrotik routerek
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Gitáros topic
- Autós topik
- Egyre csak fejlődik az AI, emberek tízezreit rúgja majd ki a BT
- Android szakmai topik
- Kínai és egyéb olcsó órák topikja
- További aktív témák...
- ASUS TUF Gaming F15 FX506 - 15.6"FHD IPS 144Hz - i5-11400H - 8GB - 512GB - RTX 3050 Ti - 1,5 év gari
- Csere-Beszámítás! Intel Core I9 14900KS 24Mag-32Szál processzor!
- DELL PowerEdge R730xd 12LFF rack szerver - 2xE5-2680v3,64GB RAM,4x1GbE,H330 RAID v ZFS
- Bomba ár! Dell Latitude 3590 - i5-8GEN I 8GB I 256SSD I HDMI I 15,6" FHD I Cam I W11 I Garancia!
- Fotó állvány eladó
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: PC Trade Systems Kft.
Város: Szeged