Hirdetés

Új hozzászólás Aktív témák

  • Taci
    addikt

    Ha egy url /-el kezdődik, akkor az jelenti azt, hogy a root url-hez képest.
    Azaz a helyes megoldás a "/js/script.j?v=1.0.0"
    A teljes elérési útvonalas megoldás is jó még, de ennek csak akkor van értelme ha pl. CDN-t használsz.
    A // kezdetű ugyanez, csak az megengedi mind a http, mind a https-t, egy időben divat volt, de http-t már senki nem használ, szóval értelmetlen.

    Köszönöm szépen a részletes magyarázatot! (Már sokadjára! :R )

  • martonx
    veterán

    Meg tudnátok mondani, kérlek, hogy JS-ben mi a helyes hivatkozási "forma" a szerveren lévő fájlokra?

    Jelenleg így használom (példának most még csak az Axios-t tudom felhozni, de ettől még jó példa):
    axios.get("../html/feed_item.html")

    HTML-ben pedig így:
     <script src="../js/script.js?v=1.0.0"></script>

    Tehát nem a teljes elérési út van megadva, csak a jelenlegi mappára viszonyítva, és ahhoz képest itt pl. ugye egy mappával visszább : ../

    Nem hiszem, hogy saját kútfőből csináltam volna így, és most randomra megnéztem pár weboldalt, és ott sem egységes. Ezeket láttam még:
    - teljes elérési útvonal (https://pelda.hu/js/script.js)
    - egy db /-jellel kezdve (/media/product/.....)
    - két db /-jellel kezdve (//stat.pelda.hu/script.js)

    Melyik a "helyes" (vagyis inkább ajánlott) módszer?
    Azzal amit jelenleg használok, most egy kis probléma adódott, ahogy új aloldalakat hoznék létre, mert mivel új almappákba kerültek, a szükséges fájlok már más útvonalon vannak az előzőhöz képest. Ezért szeretném kikérni a véleményeteket, melyik irányba változtassak.
    Nem tudom, van-e előnye/hátránya bármelyiknek is, de ti hátha tudjátok.
    Nekem a teljes elérési út lenne a leglogikusabb, mégis, találtam jó pár nevesebb weboldalt, ahol nem így van - és nem tudom az okát.

    Köszönöm.

    Ha egy url /-el kezdődik, akkor az jelenti azt, hogy a root url-hez képest.
    Azaz a helyes megoldás a "/js/script.j?v=1.0.0"
    A teljes elérési útvonalas megoldás is jó még, de ennek csak akkor van értelme ha pl. CDN-t használsz.
    A // kezdetű ugyanez, csak az megengedi mind a http, mind a https-t, egy időben divat volt, de http-t már senki nem használ, szóval értelmetlen.

  • Taci
    addikt

    Meg tudnátok mondani, kérlek, hogy JS-ben mi a helyes hivatkozási "forma" a szerveren lévő fájlokra?

    Jelenleg így használom (példának most még csak az Axios-t tudom felhozni, de ettől még jó példa):
    axios.get("../html/feed_item.html")

    HTML-ben pedig így:
     <script src="../js/script.js?v=1.0.0"></script>

    Tehát nem a teljes elérési út van megadva, csak a jelenlegi mappára viszonyítva, és ahhoz képest itt pl. ugye egy mappával visszább : ../

    Nem hiszem, hogy saját kútfőből csináltam volna így, és most randomra megnéztem pár weboldalt, és ott sem egységes. Ezeket láttam még:
    - teljes elérési útvonal (https://pelda.hu/js/script.js)
    - egy db /-jellel kezdve (/media/product/.....)
    - két db /-jellel kezdve (//stat.pelda.hu/script.js)

    Melyik a "helyes" (vagyis inkább ajánlott) módszer?
    Azzal amit jelenleg használok, most egy kis probléma adódott, ahogy új aloldalakat hoznék létre, mert mivel új almappákba kerültek, a szükséges fájlok már más útvonalon vannak az előzőhöz képest. Ezért szeretném kikérni a véleményeteket, melyik irányba változtassak.
    Nem tudom, van-e előnye/hátránya bármelyiknek is, de ti hátha tudjátok.
    Nekem a teljes elérési út lenne a leglogikusabb, mégis, találtam jó pár nevesebb weboldalt, ahol nem így van - és nem tudom az okát.

    Köszönöm.

  • martonx
    veterán

    Hú, akkor máris oda a sikerélmény. Ez gyors volt. :DDD
    Viszont ahogy nézem, lassú nettel (Lassú 4G emulálása) csinálja azokat a teszteket, és attól azért nem lehet csodát várni egy képeket (is) tartalmazó oldal esetében.
    De végig megyek mindenen, hátha valamit tudok még faragni.
    Köszönöm.

    No igen, ezért is írtam, hogy itt nézd. A böngészőben localhoston minden villámgyors :D
    Azért képeket is tartalmazó oldalnál lassú 4G emulálással is simán lehet 90 pont felett szerezni az igazi pagespeeden.

  • Taci
    addikt

    Ne lighthouse-ban (böngésző F12) nézd, hanem a pagespeed weboldalán a google-nek: PageSpeed Insights (web.dev)
    És itt is igaziból mostanra egyedül a mobilos szám számít, a google már csak ezt veszi bele a rangsorolásba.

    Hú, akkor máris oda a sikerélmény. Ez gyors volt. :DDD
    Viszont ahogy nézem, lassú nettel (Lassú 4G emulálása) csinálja azokat a teszteket, és attól azért nem lehet csodát várni egy képeket (is) tartalmazó oldal esetében.
    De végig megyek mindenen, hátha valamit tudok még faragni.
    Köszönöm.

  • martonx
    veterán

    Meg is érte rendbe rakni:

    Bár még van mit csinálnom rajta, de legalább egy kis sikerélmény.
    Köszönöm a tanácsokat. :)

    Ne lighthouse-ban (böngésző F12) nézd, hanem a pagespeed weboldalán a google-nek: PageSpeed Insights (web.dev)
    És itt is igaziból mostanra egyedül a mobilos szám számít, a google már csak ezt veszi bele a rangsorolásba.

  • Taci
    addikt

    Látod - látod :D
    Itt kezdődik a webfejlesztés. Cms fölé template-et minden hülye be tud húzni, az fölé minden hülye össze tud kókányolni valamit. Aztán meg megy a csodálkozás, hogy miért lett szar a végeredmény.
    Örülök, hogy te normálisan állsz hozzá.

    Meg is érte rendbe rakni:

    Bár még van mit csinálnom rajta, de legalább egy kis sikerélmény.
    Köszönöm a tanácsokat. :)

  • martonx
    veterán

    Köszönöm a tanácsot. :)
    A 800kB-nyi JS-t sikerült 250kB-ra összehúznom, és a felesleges CSS-eket is kigyomláltam, (eddig észre sem vettem, hogy ilyen rengeteg felesleges volt benne...) így a kezdeti 1MB-ból lett 650kB. Ami még így is sok, de majd innen folytatom.

    Viszont most már egyértelműen szóba áll velem a Google - legalábbis a fájlok mennyisége már nem zavarja. :)

    A server side renderingen sokáig agyaltam, hogyan lehet megoldani, de trükkös, mert dinamikus a tartalom (görgetés után tölt az újabb és újabb tartalom), és ezt így nem lehet szerver oldalon generálni.
    Arra gondoltam, hogy segítsem a SEO-t, pár percenként belegenrálom az index.html megfelelő részébe az aktuálisan legfrissebb 4 elemet (4-esével tölt görgetésnél), így az szerver oldalon lesz, és a Google is egyből látja. Aztán betöltésnél törlöm azt a div-et, és jön helyére egyből a friss.
    Ez a terv egyelőre - jobb több nap alatt sem jutott eszembe.

    Köszönöm a segítséget. :)

    Látod - látod :D
    Itt kezdődik a webfejlesztés. Cms fölé template-et minden hülye be tud húzni, az fölé minden hülye össze tud kókányolni valamit. Aztán meg megy a csodálkozás, hogy miért lett szar a végeredmény.
    Örülök, hogy te normálisan állsz hozzá.

  • Taci
    addikt

    Css és Js file-okat valóban érdemes összevonni (ezt hívják bundle-nek).
    Viszont ettől függetlenül a SEO legnagyobb barátja a server side rendering. Minden más, ami nem server side renderelődik, kétesélyes hogy megjelenik a google bot számára.
    800kbyte js, óriási. Ha a google bot valami css, js-t nem tud X másodperc (de ez inkább kisebb, mint 1) alatt betölteni, akkor inkább hagyja a fenébe, nincs ideje szarakodni a lassú weboldalakkal.
    Nem véletlenül írtam le, hogy nem kellene mindeféle szart behúzkodni kliens oldalra, mint pl. axios, amik csak totál feleslegesen növelik a bundle size-ot, és lassítják le az oldalt, rontják a pagespeedet. Cserébe legalább semmit sem adnak :D

    Köszönöm a tanácsot. :)
    A 800kB-nyi JS-t sikerült 250kB-ra összehúznom, és a felesleges CSS-eket is kigyomláltam, (eddig észre sem vettem, hogy ilyen rengeteg felesleges volt benne...) így a kezdeti 1MB-ból lett 650kB. Ami még így is sok, de majd innen folytatom.

    Viszont most már egyértelműen szóba áll velem a Google - legalábbis a fájlok mennyisége már nem zavarja. :)

    A server side renderingen sokáig agyaltam, hogyan lehet megoldani, de trükkös, mert dinamikus a tartalom (görgetés után tölt az újabb és újabb tartalom), és ezt így nem lehet szerver oldalon generálni.
    Arra gondoltam, hogy segítsem a SEO-t, pár percenként belegenrálom az index.html megfelelő részébe az aktuálisan legfrissebb 4 elemet (4-esével tölt görgetésnél), így az szerver oldalon lesz, és a Google is egyből látja. Aztán betöltésnél törlöm azt a div-et, és jön helyére egyből a friss.
    Ez a terv egyelőre - jobb több nap alatt sem jutott eszembe.

    Köszönöm a segítséget. :)

  • martonx
    veterán

    Sziasztok!

    A Google Search Console-ban látom, hogy a Googlebot rendre kihagy random JS-fájlokat, amikor az oldalamat indexeli. (És .css és .jpg fájlokat is, de az nem érdekel most annyira.)

    A probléma az, hogy az oldal tartalmi részét a JS fájlok töltik fel, így amikor kihagyja őket, nem, vagy nem teljesen tölt be az oldal, így indexelés közben csak egy üres vázat lát.

    Keresem, mi lehet a jó megoldás rá.
    - Pár helyen azt írják, ha a fájlnevek sorrendjében tölti be a fájlokat, aztán amint elérte a limitet, hagyja a többit. Ezért ott azt javasolják, hogy a fontos JS fájlok mondjuk számokkal kezdődjenek. Pl. 01-fontos.js, 02-kevesbe-fontos.js, 09-abszolut-nem-fontos.js.
    Ennek viszont ellent mond, hogy legutóbb pl. a bootstrap.min.js fájlt hagyta ki, holott az szinte a legelső az ABC-sorrendben.
    - Máshol azt ajánlják, hogy össze kell vonni a JS fájlokat. Most 25 db JS fájlt használ az oldal, ezt amúgy a SEO checkerek rendszeresen szóvá is teszik. Ebből 9 db az enyém (a többi a HTML template-hez volt, és már abból is kiszedtem mindet, aminek a hiánya nem okozott hibát), ezeket össze tudom vonni, ha muszáj. Összesen amúgy 800kB ez a 25 JS fájl, az enyém ebből 100kB.
    Viszont máshol meg azt írják, ez (az összevonás) csak régen volt hatásos, most már néha lassíthatja is a betöltést. Mondjuk az a pár század mp pont nem érdekel, ha a másik oldalon meg az van, hogy a be nem töltött JS-ek miatt az oldal tartalmi része üresen marad az indexelésnél.

    Még a CSS fájlokat is összevonhatom, hogy minél kevesebb fájl legyen a végén. De nem tudom, hogy a Googlebot csak darabszám alapján hagy ki fájlokat, vagy a fájlméretet is nézi.

    Tudnátok ebben a témában tanácsot adni?
    PageSpeed, hátha mond valami hasznosat, amit én nem értek

    Köszönöm.

    Css és Js file-okat valóban érdemes összevonni (ezt hívják bundle-nek).
    Viszont ettől függetlenül a SEO legnagyobb barátja a server side rendering. Minden más, ami nem server side renderelődik, kétesélyes hogy megjelenik a google bot számára.
    800kbyte js, óriási. Ha a google bot valami css, js-t nem tud X másodperc (de ez inkább kisebb, mint 1) alatt betölteni, akkor inkább hagyja a fenébe, nincs ideje szarakodni a lassú weboldalakkal.
    Nem véletlenül írtam le, hogy nem kellene mindeféle szart behúzkodni kliens oldalra, mint pl. axios, amik csak totál feleslegesen növelik a bundle size-ot, és lassítják le az oldalt, rontják a pagespeedet. Cserébe legalább semmit sem adnak :D

  • sztanozs
    veterán

    Sziasztok!

    Ha van egy loop ciklusom, akkor amíg az le nem jár, nem látható a végeredmény. Példa.

    A példában látható, hogy az X azonosítóval ellátott elem végeredménye: 1000. Csakhogy! Én szeretném látni az összes többi állapotot, nem csak a végeredményt. Tudom, hogy a példám rohadt gyorsan fut le hozzá, de a végcél, amire kellene, az nem ennyiből áll, konkrétan egy több mp-ig futó kód állapotát akarom kiiratni %-ban.

    Kérdés az, hogy van-e erre megoldás? Előre is köszönöm a válaszokat!

    Ui.: Érdekesség, ahogyan látható a példában is, Console-ban működik a folyamatos kijelzés.

  • Taci
    addikt

    Sziasztok!

    A Google Search Console-ban látom, hogy a Googlebot rendre kihagy random JS-fájlokat, amikor az oldalamat indexeli. (És .css és .jpg fájlokat is, de az nem érdekel most annyira.)

    A probléma az, hogy az oldal tartalmi részét a JS fájlok töltik fel, így amikor kihagyja őket, nem, vagy nem teljesen tölt be az oldal, így indexelés közben csak egy üres vázat lát.

    Keresem, mi lehet a jó megoldás rá.
    - Pár helyen azt írják, ha a fájlnevek sorrendjében tölti be a fájlokat, aztán amint elérte a limitet, hagyja a többit. Ezért ott azt javasolják, hogy a fontos JS fájlok mondjuk számokkal kezdődjenek. Pl. 01-fontos.js, 02-kevesbe-fontos.js, 09-abszolut-nem-fontos.js.
    Ennek viszont ellent mond, hogy legutóbb pl. a bootstrap.min.js fájlt hagyta ki, holott az szinte a legelső az ABC-sorrendben.
    - Máshol azt ajánlják, hogy össze kell vonni a JS fájlokat. Most 25 db JS fájlt használ az oldal, ezt amúgy a SEO checkerek rendszeresen szóvá is teszik. Ebből 9 db az enyém (a többi a HTML template-hez volt, és már abból is kiszedtem mindet, aminek a hiánya nem okozott hibát), ezeket össze tudom vonni, ha muszáj. Összesen amúgy 800kB ez a 25 JS fájl, az enyém ebből 100kB.
    Viszont máshol meg azt írják, ez (az összevonás) csak régen volt hatásos, most már néha lassíthatja is a betöltést. Mondjuk az a pár század mp pont nem érdekel, ha a másik oldalon meg az van, hogy a be nem töltött JS-ek miatt az oldal tartalmi része üresen marad az indexelésnél.

    Még a CSS fájlokat is összevonhatom, hogy minél kevesebb fájl legyen a végén. De nem tudom, hogy a Googlebot csak darabszám alapján hagy ki fájlokat, vagy a fájlméretet is nézi.

    Tudnátok ebben a témában tanácsot adni?
    PageSpeed, hátha mond valami hasznosat, amit én nem értek

    Köszönöm.

  • Mr. Y
    őstag

    Sziasztok!

    Ha van egy loop ciklusom, akkor amíg az le nem jár, nem látható a végeredmény. Példa.

    A példában látható, hogy az X azonosítóval ellátott elem végeredménye: 1000. Csakhogy! Én szeretném látni az összes többi állapotot, nem csak a végeredményt. Tudom, hogy a példám rohadt gyorsan fut le hozzá, de a végcél, amire kellene, az nem ennyiből áll, konkrétan egy több mp-ig futó kód állapotát akarom kiiratni %-ban.

    Kérdés az, hogy van-e erre megoldás? Előre is köszönöm a válaszokat!

    Ui.: Érdekesség, ahogyan látható a példában is, Console-ban működik a folyamatos kijelzés.

  • Mr. Y
    őstag

    Sziasztok!

    Kidolgoztam egy konvertert JS alapokon.
    A következőt csinálja:
    - Egy TextArea mezőbe 1:1-be be kell másolni egy excel tartalmát.
    - A program kategorizálja a sorokat tartalmak alapján.
    - Összesen 4 fajta formátumban elrendezi őket.
    - Minden opcióhoz társítva van egy egyszerű másolás script.
    - A kimásolt tartalmak úgy vannak generálva, hogy egy excel táblázatba másolva a helyes formátumban jelenjenek meg.

    Ezt szeretném kicsit fejleszteni és lövésem sincsen, hogy egyáltalán lehetséges-e.
    A végeredménnyel ugyanis az alábbi történik:

    Megnyitnak egy excel táblázatot és készítenek 4 tabot. Minden tabba a megfelelő formátumú végeredményt beillesztik.

    A kérdés az lenne, lehetne-e ezt automatizálni? Hogy csak egy Download gomb legyen és a konvertált végeredményekből létrehozza az excel fájlt a 4 tabbal, a megfelelő helyre betéve a megfelelő contentet és azt letöltse?

    Megoldható ez?
    Előre is köszönöm a válaszokt!

    Találtam megoldást, csak másként kellett keresni :)

  • Mr. Y
    őstag

    Sziasztok!

    Kidolgoztam egy konvertert JS alapokon.
    A következőt csinálja:
    - Egy TextArea mezőbe 1:1-be be kell másolni egy excel tartalmát.
    - A program kategorizálja a sorokat tartalmak alapján.
    - Összesen 4 fajta formátumban elrendezi őket.
    - Minden opcióhoz társítva van egy egyszerű másolás script.
    - A kimásolt tartalmak úgy vannak generálva, hogy egy excel táblázatba másolva a helyes formátumban jelenjenek meg.

    Ezt szeretném kicsit fejleszteni és lövésem sincsen, hogy egyáltalán lehetséges-e.
    A végeredménnyel ugyanis az alábbi történik:

    Megnyitnak egy excel táblázatot és készítenek 4 tabot. Minden tabba a megfelelő formátumú végeredményt beillesztik.

    A kérdés az lenne, lehetne-e ezt automatizálni? Hogy csak egy Download gomb legyen és a konvertált végeredményekből létrehozza az excel fájlt a 4 tabbal, a megfelelő helyre betéve a megfelelő contentet és azt letöltse?

    Megoldható ez?
    Előre is köszönöm a válaszokt!

  • martonx
    veterán

    Épp azt szeretném szépen megcsinálni.
    Mert nem ennyi a formázása, hanem több mint 15sor, és azt újra és újra bemásolni 1 sor változás miatt, eléggé sufni tuning.
    JS dom -al valahogy csak el lehet érni, és 90 kódsort fel lehet cserélni 1-re.

    Amúgy annak nincs adva class , mint ahogy látszik is, tehát kellene adnom egy class-t, tehát még több kódsor.

    jsfiddle példa?

  • lanszelot
    addikt

    Másik class-t adsz neki?

    Épp azt szeretném szépen megcsinálni.
    Mert nem ennyi a formázása, hanem több mint 15sor, és azt újra és újra bemásolni 1 sor változás miatt, eléggé sufni tuning.
    JS dom -al valahogy csak el lehet érni, és 90 kódsort fel lehet cserélni 1-re.

    Amúgy annak nincs adva class , mint ahogy látszik is, tehát kellene adnom egy class-t, tehát még több kódsor.

  • martonx
    veterán

    Hello,
    Hogyan tudom gomb nyomásra megváltoztatni a "steps(1)" -t "linear" -ra?
    .box span::before {
        animation: animate 2s steps(1) infinite;
    }

    Másik class-t adsz neki?

  • lanszelot
    addikt

    Hello,
    Hogyan tudom gomb nyomásra megváltoztatni a "steps(1)" -t "linear" -ra?
    .box span::before {
        animation: animate 2s steps(1) infinite;
    }

  • martonx
    veterán

    Köszi, ez így nekem is szimpatikusabb. Alapvetően én szeretem a destructure-t, de itt valóban sok értelme nem volt, csak az én megoldásommal, anélkül már kész kód tömböt hánytam össze, amin a TS-se segített.

    Hja, a TS-t se szeretem :D

  • _ak_
    addikt

    Így már világos, hogy mi volt a szándék. Szerintem így sokkal egyszerűbb.
    Ez a kényszeres dekonstruktorozás, amit csináltál, szerintem bőven rontja az olvashatóságot, de persze ez szubjektív.

    [link]

    Köszi, ez így nekem is szimpatikusabb. Alapvetően én szeretem a destructure-t, de itt valóban sok értelme nem volt, csak az én megoldásommal, anélkül már kész kód tömböt hánytam össze, amin a TS-se segített.

  • Sziasztok!

    Összedobtam egy JSFiddle-t a problémáról.
    A probléma a következő: Adott 2 gomb, ami az én laikus olvasatomban ugyan azt kellene, hogy csinálja. Mindkettő JSON kezelés.
    Csakhogy, az első gomb egy input (valóságban textarea, de itt lényegtelen) mezőbe beillesztett JSON formátummal dolgozna, a másik pedig egy JS-ben definiált JSON formátummal. A kettő tulajdonképpen ugyan az.
    Mindazonáltal csak a második működik, az elsőre minden esetben ugyan az a válasz: undefinied. Persze azt már nem mondaná meg a console, hogy mi a véres t*k*m nincs definiálva...

    Valaki lát különbséget? Előre is köszönöm a válaszokat!

    Ui.: Számomra az első gomb működése lenne a fontos.

    @martonx: én is hiányoltam a getElementById-t, de meglepő módon működik és fogalmam sincs, hogy miért :DDD talán az input+button miatt mert egy form? :F

    @Mr. Y: ha kiiratod simán az array-t akkor ott már láthatod is mi a hiba ...
    JSFiddle

  • martonx
    veterán

    Sziasztok!

    Összedobtam egy JSFiddle-t a problémáról.
    A probléma a következő: Adott 2 gomb, ami az én laikus olvasatomban ugyan azt kellene, hogy csinálja. Mindkettő JSON kezelés.
    Csakhogy, az első gomb egy input (valóságban textarea, de itt lényegtelen) mezőbe beillesztett JSON formátummal dolgozna, a másik pedig egy JS-ben definiált JSON formátummal. A kettő tulajdonképpen ugyan az.
    Mindazonáltal csak a második működik, az elsőre minden esetben ugyan az a válasz: undefinied. Persze azt már nem mondaná meg a console, hogy mi a véres t*k*m nincs definiálva...

    Valaki lát különbséget? Előre is köszönöm a válaszokat!

    Ui.: Számomra az első gomb működése lenne a fontos.

    Nagy különbség, hogy alapvetően rosszul olvasod ki az inputból a kódot. document.getElementById-val fogod az input element-et, és szedd ki a value-ját. Ezt utána már csak Json.Parse-olni kell, és máris ugyanott leszel, mint a JS-ben tárolt json-nál.

  • Mr. Y
    őstag

    Sziasztok!

    Összedobtam egy JSFiddle-t a problémáról.
    A probléma a következő: Adott 2 gomb, ami az én laikus olvasatomban ugyan azt kellene, hogy csinálja. Mindkettő JSON kezelés.
    Csakhogy, az első gomb egy input (valóságban textarea, de itt lényegtelen) mezőbe beillesztett JSON formátummal dolgozna, a másik pedig egy JS-ben definiált JSON formátummal. A kettő tulajdonképpen ugyan az.
    Mindazonáltal csak a második működik, az elsőre minden esetben ugyan az a válasz: undefinied. Persze azt már nem mondaná meg a console, hogy mi a véres t*k*m nincs definiálva...

    Valaki lát különbséget? Előre is köszönöm a válaszokat!

    Ui.: Számomra az első gomb működése lenne a fontos.

  • nevemfel
    senior tag

    Végülis az még csak 2 éve jött ki. Én kérek elnézést.

    Nem kell elnézést kérned, nem tettél semmi rosszat. Csupán arra akartam felhívni a figyelmet, hogy javascriptben ez a fícsör még relatíve új ((persze kinek mi számít újnak. ami tavalyelőtt még divatos volt (kovid), az ma már idejétmúlt (ukrán háború miatt)) zárójel sokszorosan bezárva, nem akarom elterelni a témát).

    Typescriptben bizonyára régebb óta megtalálható (nem ismerem a typescriptet, csak megnéztem egy videót a témáról).

  • inf3rno
    nagyúr

    Pedig az ES6 se most kezdett terjedni :D :B

    Én végignéztem anno ES6 feature-öket, de ezt sehol nem hozták. Amúgy hasznos.

  • inf3rno
    nagyúr

    Működni működik, csak nem tudom, hogy nem csinálok-e felesleges loopokat. [link]

    Átírtam sima JS-re, nem tudom pontosan, hogy hogy működik a jsfiddle TS/Babel.

    @inf3rno: :K Optional Chaning (?.) MDN

    Köszi!

  • martonx
    veterán

    Működni működik, csak nem tudom, hogy nem csinálok-e felesleges loopokat. [link]

    Átírtam sima JS-re, nem tudom pontosan, hogy hogy működik a jsfiddle TS/Babel.

    @inf3rno: :K Optional Chaning (?.) MDN

    Így már világos, hogy mi volt a szándék. Szerintem így sokkal egyszerűbb.
    Ez a kényszeres dekonstruktorozás, amit csináltál, szerintem bőven rontja az olvashatóságot, de persze ez szubjektív.

    [link]

  • martonx
    veterán

    Ez a "selectionHistory?.selections?.filter" js szintaxis egyáltalán? Sosem láttam ilyet, de kezdem elveszíteni a fonalat a nyelvvel kapcsolatban, annyira gyorsan változik.

    Pedig az ES6 se most kezdett terjedni :D :B

  • _ak_
    addikt

    jsfiddle, codepen működő példát ha küldenél nekünk, talán nagyobb kedvvel nézne rá bárki is.

    Működni működik, csak nem tudom, hogy nem csinálok-e felesleges loopokat. [link]

    Átírtam sima JS-re, nem tudom pontosan, hogy hogy működik a jsfiddle TS/Babel.

    @inf3rno: :K Optional Chaning (?.) MDN

  • inf3rno
    nagyúr

    Előre is elnézést az auto-correctes felig ékezetes, felig magyar, felig angol kommentert.

    Mivel magamtol nem jöttem ra ezért osszelegoztam a megoldást, ti ezt értitek? Úgy érzem, hogy feleslegesen toltam túl a dolgot:

    const onlySelectable = allOptions
      ?.filter((e: { etype: string }) => e === 'SELECTABLE')
      .map(({ eorder, eid }) => ({ eorder, eid }));

    const filterAndAddOrderNum = (
      selectionHistory: { eid: string, selectedOption: string }[],
     onlySelectable: { eorder: number; eid: string }[]
    ) => {
      const map = new Map();
      const filteredSelectionHistory = selectionHistory?.selections?.filter(({ eid: id1 }) =>
       onlySelectable.some(({ eid: id2 }) => id1 === id2)
      );
     filteredSelectionHistory.forEach((item) => map.set(item.eid, item));
     onlySelectable.forEach((item) =>
        map.set(item.eid, { ...map.get(item.eid), ...item })
      );

      return Array.from(map.values());
    };


    Lényegében van egy forrás JSON ami mindig a friss adatokat tartalmazza, az eorder változhat es nekem az alapján kell sorrendben megjelentetni az adatokat, illetve van egy history JSON ahol eddig csak az id es a user opciója volt elmentve. A feladat, hogy miután megkaptam a forrást es a history-t szinkronizáljam azokat. Tehát a redux state-ben a history-bol kinyert eid-hoz csatoljam eorder-t, igy a frissen megjelenített adatok es a history-bol jövő adatok is szinkronban lennének, mert időközben a sorrend es a tartalom is változhat. Az esetleg (user által) ujra elküldött adatoknak is tukrozniuk kell a forrásban történt változást.

    Nem feltétlen 1 liner megoldást keresek sõt, de egy másod véleménynek örülnék, hogy lehet-e ezt egyszerűbben is.

    Ez a "selectionHistory?.selections?.filter" js szintaxis egyáltalán? Sosem láttam ilyet, de kezdem elveszíteni a fonalat a nyelvvel kapcsolatban, annyira gyorsan változik.

  • martonx
    veterán

    Előre is elnézést az auto-correctes felig ékezetes, felig magyar, felig angol kommentert.

    Mivel magamtol nem jöttem ra ezért osszelegoztam a megoldást, ti ezt értitek? Úgy érzem, hogy feleslegesen toltam túl a dolgot:

    const onlySelectable = allOptions
      ?.filter((e: { etype: string }) => e === 'SELECTABLE')
      .map(({ eorder, eid }) => ({ eorder, eid }));

    const filterAndAddOrderNum = (
      selectionHistory: { eid: string, selectedOption: string }[],
     onlySelectable: { eorder: number; eid: string }[]
    ) => {
      const map = new Map();
      const filteredSelectionHistory = selectionHistory?.selections?.filter(({ eid: id1 }) =>
       onlySelectable.some(({ eid: id2 }) => id1 === id2)
      );
     filteredSelectionHistory.forEach((item) => map.set(item.eid, item));
     onlySelectable.forEach((item) =>
        map.set(item.eid, { ...map.get(item.eid), ...item })
      );

      return Array.from(map.values());
    };


    Lényegében van egy forrás JSON ami mindig a friss adatokat tartalmazza, az eorder változhat es nekem az alapján kell sorrendben megjelentetni az adatokat, illetve van egy history JSON ahol eddig csak az id es a user opciója volt elmentve. A feladat, hogy miután megkaptam a forrást es a history-t szinkronizáljam azokat. Tehát a redux state-ben a history-bol kinyert eid-hoz csatoljam eorder-t, igy a frissen megjelenített adatok es a history-bol jövő adatok is szinkronban lennének, mert időközben a sorrend es a tartalom is változhat. Az esetleg (user által) ujra elküldött adatoknak is tukrozniuk kell a forrásban történt változást.

    Nem feltétlen 1 liner megoldást keresek sõt, de egy másod véleménynek örülnék, hogy lehet-e ezt egyszerűbben is.

    jsfiddle, codepen működő példát ha küldenél nekünk, talán nagyobb kedvvel nézne rá bárki is.

  • _ak_
    addikt

    Előre is elnézést az auto-correctes felig ékezetes, felig magyar, felig angol kommentert.

    Mivel magamtol nem jöttem ra ezért osszelegoztam a megoldást, ti ezt értitek? Úgy érzem, hogy feleslegesen toltam túl a dolgot:

    const onlySelectable = allOptions
      ?.filter((e: { etype: string }) => e === 'SELECTABLE')
      .map(({ eorder, eid }) => ({ eorder, eid }));

    const filterAndAddOrderNum = (
      selectionHistory: { eid: string, selectedOption: string }[],
     onlySelectable: { eorder: number; eid: string }[]
    ) => {
      const map = new Map();
      const filteredSelectionHistory = selectionHistory?.selections?.filter(({ eid: id1 }) =>
       onlySelectable.some(({ eid: id2 }) => id1 === id2)
      );
     filteredSelectionHistory.forEach((item) => map.set(item.eid, item));
     onlySelectable.forEach((item) =>
        map.set(item.eid, { ...map.get(item.eid), ...item })
      );

      return Array.from(map.values());
    };


    Lényegében van egy forrás JSON ami mindig a friss adatokat tartalmazza, az eorder változhat es nekem az alapján kell sorrendben megjelentetni az adatokat, illetve van egy history JSON ahol eddig csak az id es a user opciója volt elmentve. A feladat, hogy miután megkaptam a forrást es a history-t szinkronizáljam azokat. Tehát a redux state-ben a history-bol kinyert eid-hoz csatoljam eorder-t, igy a frissen megjelenített adatok es a history-bol jövő adatok is szinkronban lennének, mert időközben a sorrend es a tartalom is változhat. Az esetleg (user által) ujra elküldött adatoknak is tukrozniuk kell a forrásban történt változást.

    Nem feltétlen 1 liner megoldást keresek sõt, de egy másod véleménynek örülnék, hogy lehet-e ezt egyszerűbben is.

  • lanszelot
    addikt

    Hello,
    Object-höz szeretnék object-et adni, hogy utána json file-ba kitoljam.
    Tehát tömb nem jó.
    Példa: linkek az alap object, amihez adnám a youtube, amin belül a link és a kép -eket adnám.
    t0linkek = {// "youtube": {// "kep": "youtube.jpg",// "link": "ww.youtube.com"// },// Több objectet dobálna hozzá , nem kézzel írom bele, loop dobálja bele.
    Hogyan tudom ezt megcsinálni?
    linkek = {"youtube": {"kep": "youtube.jpg","link": "ww.youtube.com"},"google": {kep:...stb}};

    nem tökéletes formában, de megoldottam :)

  • lanszelot
    addikt

    Hello,
    Object-höz szeretnék object-et adni, hogy utána json file-ba kitoljam.
    Tehát tömb nem jó.
    Példa: linkek az alap object, amihez adnám a youtube, amin belül a link és a kép -eket adnám.
    t0linkek = {// "youtube": {// "kep": "youtube.jpg",// "link": "ww.youtube.com"// },// Több objectet dobálna hozzá , nem kézzel írom bele, loop dobálja bele.
    Hogyan tudom ezt megcsinálni?
    linkek = {"youtube": {"kep": "youtube.jpg","link": "ww.youtube.com"},"google": {kep:...stb}};

  • martonx
    veterán

    Nem lenne egyszerűbb a kattintható komponenst egy valamilyen Link componens-be wrappelni? És akkor nem kell foglalkozni a localStorage dologgal, hanem a router kezelné az egészet.

    Én is pont ezt akartam írni, ha nem is link, de normális router használata kell, a localstorage-os bénázás helyett.

  • cattus
    addikt

    Sziasztok! :)
    Egy kis segítséget szeretnék kérni. :)
    Egy React alapú webalkalmazást fejlesztek, ahol adott ez a komponens:const MainLesson = () => {
    const navigate = useNavigate();
    const [ openID, setOpenID ] = useState();
    const initialState = '0';
    const [ childOpenID, setChildOpenID ] = useState(initialState);

    useEffect(() => {
        console.log('Beállítjuk a localstorage-nek az id-t');
        localStorage.setItem('id', JSON.parse(childOpenID));
        console.log('Beállítottuk a localstorage-nek az id-t');
    });

    return (
        <div>
           {LessonsData.map((lessonItem) =>
               <div key={lessonItem.id} onClick={() => setOpenID(lessonItem.id)}>
                   {lessonItem.id !== openID
                       ? <LessonCard taskItem={lessonItem} />
                       : lessonItem.id === openID && lessonItem.subsection > 0 ?
                           lessonItem.child.map((lessonChildItem) =>
                               <div key={lessonChildItem.id}
                                    onClick={() => {
                                       setChildOpenID(lessonChildItem.id);
                                    }}
                               >
                                 <LessonCard taskItem={lessonChildItem} />
                                 {childOpenID !== '0' &&
                                   navigate(`/lesson/${childOpenID}`)}
                               </div>)
                           : <LessonCard taskItem={lessonItem} />}
                       </div>)}
                   </div>
          );
    };

    A komponens lényege röviden az, hogy ha egy adott LessonCard-ra rákattintok, akkor a localstorage-ben eltárolja annak az id-ját és ha az egy gyerekelem, akkor át is navigál a megfelelő oldalra.
    Az App-ben pedig dinamikusan kezelem azt, hogy az id-nak megfelelő oldal nyíljon meg:
    function App() {
    const authenticationContext = useContext(AuthenticationContext);
    const getLessonID = () => {
        console.log('Átadjuk az app-ben az id-t');
        const id = JSON.parse(localStorage.getItem('id'));
        console.log('id az app-ban:', id);
        return id;
    };

    const lessonID = getLessonID();
    console.log('lessonID:', lessonID);

    return (
        <Layout>
           <Routes>
               <Route path='/' element={<HomePage />} />
               {!authenticationContext.isLoggedIn &&
                   <Route path='/authentication'
                          element={<AuthenticationPage />}
                   />}
               <Route path='/authors' element={<AuthorsPage />} />
               <Route path='/contact' element={<ContactPage />} />
               <Route path='/topics' element={<TopicsPage />} />
               {authenticationContext.isLoggedIn &&
                   <Route path='/lessons' element={<LessonsPage />} />}
               {authenticationContext.isLoggedIn &&
                   <Route path='/profile' element={<UserProfile />} />}
               {authenticationContext.isLoggedIn &&
                   <Route path='/lesson/:id'
                       element={lessons.content.body.map(
                           block => block.id === lessonID &&
                               Components(block))}/>}
               <Route path='*' element={<NotFound />} />
           </Routes>
        </Layout>
        );
    }

    A probléma az, hogy ha rákattintok egy adott leckére, akkor szépen átnavigál a megfelelő oldalra és be is teszi a localstorage-be az id-t, viszont mivel az App nem renderelődik le újra, így a képernyőn mindig az előző lecke oldala nyílik meg. Ezt úgy kell érteni, hogy rákattintok először a 21-es id-jú leckére, majd visszamegyek és meg akarom nyitni a 22-es id-jú leckét, akkor az url jó lesz, tehát "localhost:3000/lesson/22" lesz, de a 21-es oldalát látom. Ha ráfrissítek az oldalra, akkor marad a jó url, viszont már a 22-es leckét fogom látni.
    Az lenne a kérdésem, hogy szerintetek hogyan lehetne megoldani azt, hogy azelőtt kapja meg az App localstorage-ból az id-t, mielőtt még elkezdené lerendelni az adott komponens, így elérve, hogy jó oldal legyen megjelenítve?

    Előre is köszönöm a segítséget! :R

    Nem lenne egyszerűbb a kattintható komponenst egy valamilyen Link componens-be wrappelni? És akkor nem kell foglalkozni a localStorage dologgal, hanem a router kezelné az egészet.

  • Ukeve
    tag

    Sziasztok! :)
    Egy kis segítséget szeretnék kérni. :)
    Egy React alapú webalkalmazást fejlesztek, ahol adott ez a komponens:const MainLesson = () => {
    const navigate = useNavigate();
    const [ openID, setOpenID ] = useState();
    const initialState = '0';
    const [ childOpenID, setChildOpenID ] = useState(initialState);

    useEffect(() => {
        console.log('Beállítjuk a localstorage-nek az id-t');
        localStorage.setItem('id', JSON.parse(childOpenID));
        console.log('Beállítottuk a localstorage-nek az id-t');
    });

    return (
        <div>
           {LessonsData.map((lessonItem) =>
               <div key={lessonItem.id} onClick={() => setOpenID(lessonItem.id)}>
                   {lessonItem.id !== openID
                       ? <LessonCard taskItem={lessonItem} />
                       : lessonItem.id === openID && lessonItem.subsection > 0 ?
                           lessonItem.child.map((lessonChildItem) =>
                               <div key={lessonChildItem.id}
                                    onClick={() => {
                                       setChildOpenID(lessonChildItem.id);
                                    }}
                               >
                                 <LessonCard taskItem={lessonChildItem} />
                                 {childOpenID !== '0' &&
                                   navigate(`/lesson/${childOpenID}`)}
                               </div>)
                           : <LessonCard taskItem={lessonItem} />}
                       </div>)}
                   </div>
          );
    };

    A komponens lényege röviden az, hogy ha egy adott LessonCard-ra rákattintok, akkor a localstorage-ben eltárolja annak az id-ját és ha az egy gyerekelem, akkor át is navigál a megfelelő oldalra.
    Az App-ben pedig dinamikusan kezelem azt, hogy az id-nak megfelelő oldal nyíljon meg:
    function App() {
    const authenticationContext = useContext(AuthenticationContext);
    const getLessonID = () => {
        console.log('Átadjuk az app-ben az id-t');
        const id = JSON.parse(localStorage.getItem('id'));
        console.log('id az app-ban:', id);
        return id;
    };

    const lessonID = getLessonID();
    console.log('lessonID:', lessonID);

    return (
        <Layout>
           <Routes>
               <Route path='/' element={<HomePage />} />
               {!authenticationContext.isLoggedIn &&
                   <Route path='/authentication'
                          element={<AuthenticationPage />}
                   />}
               <Route path='/authors' element={<AuthorsPage />} />
               <Route path='/contact' element={<ContactPage />} />
               <Route path='/topics' element={<TopicsPage />} />
               {authenticationContext.isLoggedIn &&
                   <Route path='/lessons' element={<LessonsPage />} />}
               {authenticationContext.isLoggedIn &&
                   <Route path='/profile' element={<UserProfile />} />}
               {authenticationContext.isLoggedIn &&
                   <Route path='/lesson/:id'
                       element={lessons.content.body.map(
                           block => block.id === lessonID &&
                               Components(block))}/>}
               <Route path='*' element={<NotFound />} />
           </Routes>
        </Layout>
        );
    }

    A probléma az, hogy ha rákattintok egy adott leckére, akkor szépen átnavigál a megfelelő oldalra és be is teszi a localstorage-be az id-t, viszont mivel az App nem renderelődik le újra, így a képernyőn mindig az előző lecke oldala nyílik meg. Ezt úgy kell érteni, hogy rákattintok először a 21-es id-jú leckére, majd visszamegyek és meg akarom nyitni a 22-es id-jú leckét, akkor az url jó lesz, tehát "localhost:3000/lesson/22" lesz, de a 21-es oldalát látom. Ha ráfrissítek az oldalra, akkor marad a jó url, viszont már a 22-es leckét fogom látni.
    Az lenne a kérdésem, hogy szerintetek hogyan lehetne megoldani azt, hogy azelőtt kapja meg az App localstorage-ból az id-t, mielőtt még elkezdené lerendelni az adott komponens, így elérve, hogy jó oldal legyen megjelenítve?

    Előre is köszönöm a segítséget! :R

  • inf3rno
    nagyúr

    A datatables ingyenes, de az editor plugin nem tűnik annak. Persze lehetséges, hogy van mód az ingyenes használatra, ebben a részében nem mélyültem el.

    Ja látom, azzal rendesen lehúzzák az embert. Úgy viszont nekem már nem jó. Amúgy is a vue felé kacsintgatok már egy ideje, csak nem nagyon csináltam kliens oldali dolgokat mostanában. Ideje megtanulni.

  • inf3rno
    nagyúr

    Én ag-grid-et használtam korábban, az ingyenes része is elég sokat tud, és van integráció a három nagy framework-höz.

    Köszi!

  • cattus
    addikt

    Milyen könyvtárat ajánlotok most kliens oldalra? Ilyen klasszikus dolgok kellenek, hogy táblázatok, egy-egy rekord szerkesztése, kb. mint egy ügyviteli rendszerben, semmi extra, de azért ne a 90-es évek table kinézete. A szerverről JSON-LD-t küldenék, vagy max JSON-t valami REST-es megoldással. Ha lehet ne legyen nagyon elrugaszkodott, nem vagyok oda a túlzott absztrakcióért.

    Én ag-grid-et használtam korábban, az ingyenes része is elég sokat tud, és van integráció a három nagy framework-höz.

  • nevemfel
    senior tag

    Köszönöm mindkettőtöknek! Azt hiszem átnézem a licenszeket és árazást is mielőtt döntök. Sokszor csak akkor ingyenes valami, hogyha nem üzleti célhoz használom. Nem tudom a vue esetében mi a helyzet ilyen téren.

    szerk:
    Datatables is ingyenes MIT licensszel. Úgy tűnik a support, ami pénzbe kerül. [link] A Vue szintén MIT. [link]

    A datatables ingyenes, de az editor plugin nem tűnik annak. Persze lehetséges, hogy van mód az ingyenes használatra, ebben a részében nem mélyültem el.

  • inf3rno
    nagyúr

    Köszönöm mindkettőtöknek! Azt hiszem átnézem a licenszeket és árazást is mielőtt döntök. Sokszor csak akkor ingyenes valami, hogyha nem üzleti célhoz használom. Nem tudom a vue esetében mi a helyzet ilyen téren.

    szerk:
    Datatables is ingyenes MIT licensszel. Úgy tűnik a support, ami pénzbe kerül. [link] A Vue szintén MIT. [link]

  • nevemfel
    senior tag

    Milyen könyvtárat ajánlotok most kliens oldalra? Ilyen klasszikus dolgok kellenek, hogy táblázatok, egy-egy rekord szerkesztése, kb. mint egy ügyviteli rendszerben, semmi extra, de azért ne a 90-es évek table kinézete. A szerverről JSON-LD-t küldenék, vagy max JSON-t valami REST-es megoldással. Ha lehet ne legyen nagyon elrugaszkodott, nem vagyok oda a túlzott absztrakcióért.

    Én a Datatablest használtam párszor. Van hozzá editor plugin, de ezzel még nem próbálkoztam, és az ráadásul fizetős, de talán ez kiváltható más megoldással.

  • martonx
    veterán

    Milyen könyvtárat ajánlotok most kliens oldalra? Ilyen klasszikus dolgok kellenek, hogy táblázatok, egy-egy rekord szerkesztése, kb. mint egy ügyviteli rendszerben, semmi extra, de azért ne a 90-es évek table kinézete. A szerverről JSON-LD-t küldenék, vagy max JSON-t valami REST-es megoldással. Ha lehet ne legyen nagyon elrugaszkodott, nem vagyok oda a túlzott absztrakcióért.

    Vuejs + element-plus + vue good table

  • inf3rno
    nagyúr

    Milyen könyvtárat ajánlotok most kliens oldalra? Ilyen klasszikus dolgok kellenek, hogy táblázatok, egy-egy rekord szerkesztése, kb. mint egy ügyviteli rendszerben, semmi extra, de azért ne a 90-es évek table kinézete. A szerverről JSON-LD-t küldenék, vagy max JSON-t valami REST-es megoldással. Ha lehet ne legyen nagyon elrugaszkodott, nem vagyok oda a túlzott absztrakcióért.

  • disy68
    aktív tag

    Köszönöm a tanácsot.

    Átállítottam 1.1.1.1-re, és egy bő 10 percig próbáltam előhozni a lassulást, de nem sikerült.

    Viszont azt nem értem, hogy miért kellett az újabb DNS lookup?
    Mármint böngészek az oldalon egy ideje, így a DNS lookup a szerveremre nyilván már az eleje óta megvolt, másképp be se töltött volna.
    Aztán böngészek-böngészek, és egyszer csak belassul (előző screenshot), és írja, hogy megint volt egy lookup.
    Nagyon felületesek az ismereteim a témában, de nem úgy van, hogy X időre cacheli, hogy ez a domain ez az ip cím? És amíg él a cache, addig nem kérdezi újra.
    Most vagy ilyen rövidre van állítva a cache (kinél? szolgáltatónál?), vagy valami máshol mással van a baj?

    (Kérlek, javíts ki bármiben, amit rosszul tudok. Persze csak amennyire időd engedi. :) )

    Köszi.

    @martonx: De az akkor nem DNS Lookup-ként jelentkezne, hanem a kliens és szerver közötti kommunikácóban, a php által visszaadot értékekben. Erre látom is a számokat (F12 - Network alatt) a megfelelő axios-os hívásnál, de mind jó érték. (Persze ettől még belassulhat a szerver, de ez amit elkaptam és ennyiszer sikerült megismételni pont nem ez volt - legalábbis így látom, de simán tévedhetek, nagyon új ez még nekem.)

    Nem ismerem mélyen én se a témát, lehet, hogy a szolgáltatónál van valami hiba/rossz konfig, de az is lehet, hogy csak nálad lokál akadt össze valami és okozta a problémát és az új dns szerver miatt jött helyre a dolog

    Amíg ez nem jön elő tömegesen a felhasználóknál, addig nem ölnék bele túl sok energiát, hogy kiderítsem mi és hol csúszott meg.

  • Taci
    addikt

    edit: állítsd át a dns kiszolgálód címét pl. 1.1.1.1-re vagy 8.8.8.8-ra esetleg (gépen/routeren) ha így jobb, akkor net szolgáltatód dns feloldása lassú (lassúságot nem, de olyat tapasztaltam szolgáltatói dns szervernél, hogy nem tudott feloldani valamit)

    Nézd meg dev-tools (F12) network fülön, hogy pontosan meddig tartanak az egyes kérések vagy logold ki az összesnél, mikor indul és mikor jön válasz. Szerintem nem az "első" hívás tart sokáig, hanem az összes. Ellövöd a kéréseket egymás után és azok visszatérnek lassan, amiből azt látod, hogy az első lassú volt és ahhoz képest a többi meg gyors, mert async mennek a kérések. Persze így nulla kód mellett csak találgatni lehet.

    Köszönöm a tanácsot.

    Átállítottam 1.1.1.1-re, és egy bő 10 percig próbáltam előhozni a lassulást, de nem sikerült.

    Viszont azt nem értem, hogy miért kellett az újabb DNS lookup?
    Mármint böngészek az oldalon egy ideje, így a DNS lookup a szerveremre nyilván már az eleje óta megvolt, másképp be se töltött volna.
    Aztán böngészek-böngészek, és egyszer csak belassul (előző screenshot), és írja, hogy megint volt egy lookup.
    Nagyon felületesek az ismereteim a témában, de nem úgy van, hogy X időre cacheli, hogy ez a domain ez az ip cím? És amíg él a cache, addig nem kérdezi újra.
    Most vagy ilyen rövidre van állítva a cache (kinél? szolgáltatónál?), vagy valami máshol mással van a baj?

    (Kérlek, javíts ki bármiben, amit rosszul tudok. Persze csak amennyire időd engedi. :) )

    Köszi.

    @martonx: De az akkor nem DNS Lookup-ként jelentkezne, hanem a kliens és szerver közötti kommunikácóban, a php által visszaadot értékekben. Erre látom is a számokat (F12 - Network alatt) a megfelelő axios-os hívásnál, de mind jó érték. (Persze ettől még belassulhat a szerver, de ez amit elkaptam és ennyiszer sikerült megismételni pont nem ez volt - legalábbis így látom, de simán tévedhetek, nagyon új ez még nekem.)

  • martonx
    veterán

    Bocs a sok szövegért és a már 3. bejegyzésért egymás után, de közben a Network fül alatt ezt találtam:

    Ez már nyilván nem JS-téma, és máris nézek ennek is utána, de igazából még most látok ilyet először (közben ezt kezdem el olvasni hozzá: [link] ) , nem tudom, merre kezdjek neki a "javításnak". Esetleg szerver oldalon kell valamit átállítanom? Vagy ilyen a szolgáltató sebessége?
    Tudok ezzel valamit kezdeni?

    Szerintem csak hiszed, hogy a szerver gyors. Pontosabban időnként belassul, és ezt tapasztalod.

  • disy68
    aktív tag

    Kiszedtem belőle az első axios-t, de most is ugyanúgy előjön (már amikor), és most az eddigi második (most már első) axios-nál "üldögél" 2 mp-et.
    Szóval nem a fájllal van baja. De akkor mivel?

    edit: állítsd át a dns kiszolgálód címét pl. 1.1.1.1-re vagy 8.8.8.8-ra esetleg (gépen/routeren) ha így jobb, akkor net szolgáltatód dns feloldása lassú (lassúságot nem, de olyat tapasztaltam szolgáltatói dns szervernél, hogy nem tudott feloldani valamit)

    Nézd meg dev-tools (F12) network fülön, hogy pontosan meddig tartanak az egyes kérések vagy logold ki az összesnél, mikor indul és mikor jön válasz. Szerintem nem az "első" hívás tart sokáig, hanem az összes. Ellövöd a kéréseket egymás után és azok visszatérnek lassan, amiből azt látod, hogy az első lassú volt és ahhoz képest a többi meg gyors, mert async mennek a kérések. Persze így nulla kód mellett csak találgatni lehet.

  • Taci
    addikt

    Kiszedtem belőle az első axios-t, de most is ugyanúgy előjön (már amikor), és most az eddigi második (most már első) axios-nál "üldögél" 2 mp-et.
    Szóval nem a fájllal van baja. De akkor mivel?

    Bocs a sok szövegért és a már 3. bejegyzésért egymás után, de közben a Network fül alatt ezt találtam:

    Ez már nyilván nem JS-téma, és máris nézek ennek is utána, de igazából még most látok ilyet először (közben ezt kezdem el olvasni hozzá: [link] ) , nem tudom, merre kezdjek neki a "javításnak". Esetleg szerver oldalon kell valamit átállítanom? Vagy ilyen a szolgáltató sebessége?
    Tudok ezzel valamit kezdeni?

  • Taci
    addikt

    Sziasztok!

    Nem igazán tudom, miért, de néha kb. 2 mp-el megnő az egyes aloldalak/menüpontok (JS-sel generált tartalom) betöltése.

    Nem tudom megfogni, hogy pontosan mikor, mert sosem ugyanott, sosem ugyanakkor - de nagyon szeretném kideríteni az okát.
    Először arra gondoltam, az SQL query-m lassú, és amiatt tölt be lassabban néha az egy-egy eredmény.
    De megcsináltam egy dev aloldalt hozzá, ahol máshogy (optimalizáltabban) rakom össze a lekérdezést ugyanabból az adatabázisból, egymás mellé raktam a két oldalt (sima és dev), és ugyanazokat ugyanúgy töltöttem be, és ahol lassú volt az első, lassú volt a második is. Szóval nem a query a baja.

    Mivel produktív oldal, a logolást leszedtem, de most a deven a megfelelő helyeken visszakapcsoltam, és meglepő eredményt találtam (a logok így jönnek a konzolban sorrendben):

    (1) 16:06:49.994 showJS.js?v=1.0.4:176 Script (showJS) started.
    (2) 16:06:49.995 showJS.js?v=1.0.4:424 Calling first axios
    (7) 16:06:49.997 showJS.js?v=1.0.4:733 Script (showJS) finished.
    (3) 16:06:51.465 showJS.js?v=1.0.4:429 titleHTML (axios.get)
    (4) 16:06:51.494 showJS.js?v=1.0.4:551 itemHTML (axios.get)
    (5) 16:06:51.604 showJS.js?v=1.0.4:557 frontend.php (axios.get)
    (6) 16:06:51.606 showJS.js?v=1.0.4:640 Displaying results.

    Az elején a számok (pl. (1)) azt jelzik, milyen sorrendben következnek a console.log-ok a szkirptben.
    Aztán az időbélyegző. Itt akadt meg a szemem azon, hogy két közvetlen egymás alatt lévő lépés között 2 mp időkülönbség van:
    (2) 16:06:49.995 showJS.js?v=1.0.4:424 Calling first axios
    (3) 16:06:51.465 showJS.js?v=1.0.4:429 titleHTML (axios.get)

    Tehát a 424. sorban logoltatom, hogy most jön az első axios.get,
    a 426. sorban ez lefut,
    a 429.-ben pedig kiíratom a visszakapott választ: console.log("titleHTML (axios.get): " + response);

    Na ennek a műveletnek néha 2 mp-re van szüksége, holott egy 1kB-os fájlról van szó...
    Néha gondolkodás nélkül behúzza, máskor meg ott pörög a kis loader 2 mp-ig, mire végre hajlandó csinálni. Nem kell csinálnia a fájllal semmit, csak a benne lévő kemény 4-5 sornyi HTML-kódot visszaadni.
    Az a fura még, hogy utána hív ugyanígy egy másik html fájlt pont mellőle (4. lépés), aztán meg szerver oldalon végez több bonyolult műveletet is (köztük az SQL-lekérdezést és annak kiértékelését is), és annak az eredményét adja vissza (szintén axios a közvetítő közeg) az 5. lépésben, és ennek a kettőnek együtt is bőven elég pár század mp.

    A szerver gyors, ez látszik az SQL-es részből is, SSD-n is van, szóval azt kizárnám.
    Esetleg az axios-szal lenne a baj? De ha igen, mi?

    Az első axios:
    axios.get("../location/title.html")

    A második:
    axios.get("../location/item.html")

    A harmadik:
    axios.get("../location/frontend.php?a=...&b=...)

    Van tippetek, mi lehet itt a bibi?
    Persze átrakhatnám JS-be a HTML tartalmát, de azért az nem oké, hogy egy 1kB-os fájl akassza meg a rendszert. Plusz lehet, az axios-szal van a baj (vagy bármi mással), és akkor a következő fájlnál lassulna be.

    Hátha ti láttok ebben valami javítható dolgot, mert nekem nem áll össze, mi ez a 2mp-es delay.

    Köszi!

    Kiszedtem belőle az első axios-t, de most is ugyanúgy előjön (már amikor), és most az eddigi második (most már első) axios-nál "üldögél" 2 mp-et.
    Szóval nem a fájllal van baja. De akkor mivel?

  • Taci
    addikt

    Sziasztok!

    Nem igazán tudom, miért, de néha kb. 2 mp-el megnő az egyes aloldalak/menüpontok (JS-sel generált tartalom) betöltése.

    Nem tudom megfogni, hogy pontosan mikor, mert sosem ugyanott, sosem ugyanakkor - de nagyon szeretném kideríteni az okát.
    Először arra gondoltam, az SQL query-m lassú, és amiatt tölt be lassabban néha az egy-egy eredmény.
    De megcsináltam egy dev aloldalt hozzá, ahol máshogy (optimalizáltabban) rakom össze a lekérdezést ugyanabból az adatabázisból, egymás mellé raktam a két oldalt (sima és dev), és ugyanazokat ugyanúgy töltöttem be, és ahol lassú volt az első, lassú volt a második is. Szóval nem a query a baja.

    Mivel produktív oldal, a logolást leszedtem, de most a deven a megfelelő helyeken visszakapcsoltam, és meglepő eredményt találtam (a logok így jönnek a konzolban sorrendben):

    (1) 16:06:49.994 showJS.js?v=1.0.4:176 Script (showJS) started.
    (2) 16:06:49.995 showJS.js?v=1.0.4:424 Calling first axios
    (7) 16:06:49.997 showJS.js?v=1.0.4:733 Script (showJS) finished.
    (3) 16:06:51.465 showJS.js?v=1.0.4:429 titleHTML (axios.get)
    (4) 16:06:51.494 showJS.js?v=1.0.4:551 itemHTML (axios.get)
    (5) 16:06:51.604 showJS.js?v=1.0.4:557 frontend.php (axios.get)
    (6) 16:06:51.606 showJS.js?v=1.0.4:640 Displaying results.

    Az elején a számok (pl. (1)) azt jelzik, milyen sorrendben következnek a console.log-ok a szkirptben.
    Aztán az időbélyegző. Itt akadt meg a szemem azon, hogy két közvetlen egymás alatt lévő lépés között 2 mp időkülönbség van:
    (2) 16:06:49.995 showJS.js?v=1.0.4:424 Calling first axios
    (3) 16:06:51.465 showJS.js?v=1.0.4:429 titleHTML (axios.get)

    Tehát a 424. sorban logoltatom, hogy most jön az első axios.get,
    a 426. sorban ez lefut,
    a 429.-ben pedig kiíratom a visszakapott választ: console.log("titleHTML (axios.get): " + response);

    Na ennek a műveletnek néha 2 mp-re van szüksége, holott egy 1kB-os fájlról van szó...
    Néha gondolkodás nélkül behúzza, máskor meg ott pörög a kis loader 2 mp-ig, mire végre hajlandó csinálni. Nem kell csinálnia a fájllal semmit, csak a benne lévő kemény 4-5 sornyi HTML-kódot visszaadni.
    Az a fura még, hogy utána hív ugyanígy egy másik html fájlt pont mellőle (4. lépés), aztán meg szerver oldalon végez több bonyolult műveletet is (köztük az SQL-lekérdezést és annak kiértékelését is), és annak az eredményét adja vissza (szintén axios a közvetítő közeg) az 5. lépésben, és ennek a kettőnek együtt is bőven elég pár század mp.

    A szerver gyors, ez látszik az SQL-es részből is, SSD-n is van, szóval azt kizárnám.
    Esetleg az axios-szal lenne a baj? De ha igen, mi?

    Az első axios:
    axios.get("../location/title.html")

    A második:
    axios.get("../location/item.html")

    A harmadik:
    axios.get("../location/frontend.php?a=...&b=...)

    Van tippetek, mi lehet itt a bibi?
    Persze átrakhatnám JS-be a HTML tartalmát, de azért az nem oké, hogy egy 1kB-os fájl akassza meg a rendszert. Plusz lehet, az axios-szal van a baj (vagy bármi mással), és akkor a következő fájlnál lassulna be.

    Hátha ti láttok ebben valami javítható dolgot, mert nekem nem áll össze, mi ez a 2mp-es delay.

    Köszi!

  • don_peter
    senior tag

    Hozzátartozik a képlethez, hogy nyilván tudom, hogy nem megy ilyen egyszerűen a dolog. Az args[0] tartama: args[0]="@username";
    Tehát valahogy a felhasználói név alapján kellene azonosítani a kérdéses felhasználót és majd ezek után kellene lehívni a hozzá tartozó avatar kép nevét.
    Próbálkoztam ezzel az összetétellel is: const member = message.mentions.users.first(); És különböző tagokkal is kísérleteztem.

    Köszi.
    Megoldottam:
    const a ='<@!000000000000000>';
    const user_id= a.slice(3, - 1);
    const user = client.users.cache.find(user => user.id === user_id);

  • don_peter
    senior tag

    Srácok, új vagyok a területen és segítségre lenne szükségem.
    Egyelőre nem tudok megfelelően keresni sem.
    Discort bot-ot fejlesztek saját célra és tesztelgetem mit tud a rendszer, Node JS-t használva.
    Szeretném lekérdezni egy megadott felhasználó avatarképét.
    Pl. ha a sajátomat akarom lekérni az már megy:
    message.author.avatar
    Aztán úgy gondoltam, hogy ha egy másik felhasználó avatar képét vagy is URL-jét akarom lekérni és összeállítani, akkor csak a következőt használom és jó lesz, de sajna nem..:
    args[0].author.avatar
    Olvasgattam és talán a .mention is kellene hozzá, de sehogy sem jövök rá vagy találok rá a megoldásra. Tudna valaki segíteni?
    Köszi előre is.

    Hozzátartozik a képlethez, hogy nyilván tudom, hogy nem megy ilyen egyszerűen a dolog. Az args[0] tartama: args[0]="@username";
    Tehát valahogy a felhasználói név alapján kellene azonosítani a kérdéses felhasználót és majd ezek után kellene lehívni a hozzá tartozó avatar kép nevét.
    Próbálkoztam ezzel az összetétellel is: const member = message.mentions.users.first(); És különböző tagokkal is kísérleteztem.

  • don_peter
    senior tag

    Srácok, új vagyok a területen és segítségre lenne szükségem.
    Egyelőre nem tudok megfelelően keresni sem.
    Discort bot-ot fejlesztek saját célra és tesztelgetem mit tud a rendszer, Node JS-t használva.
    Szeretném lekérdezni egy megadott felhasználó avatarképét.
    Pl. ha a sajátomat akarom lekérni az már megy:
    message.author.avatar
    Aztán úgy gondoltam, hogy ha egy másik felhasználó avatar képét vagy is URL-jét akarom lekérni és összeállítani, akkor csak a következőt használom és jó lesz, de sajna nem..:
    args[0].author.avatar
    Olvasgattam és talán a .mention is kellene hozzá, de sehogy sem jövök rá vagy találok rá a megoldásra. Tudna valaki segíteni?
    Köszi előre is.

  • sztanozs
    veterán

    Köszi az infót. És be lehet állítani valahogy, hogy ne a kliens adataival dolgozzon?
    Ugyanis roppant fontos volna nekem, hogy ténylegesen másodpercre pontosan a helyes időt nézze a műveletekhez

    Akár egy cookie-ban is leküldheted, vagy custom headerben, de akár be is állíthatod az oldal kódjában.
    Amikor dátummal dolgozol érdemes GMT-t használni, vagy explicit megadni a timezone-t.

  • Mr. Y
    őstag

    Egy XHR/fetch kérésben a szervernek felküldöd a kliens UTC időt, az válaszban visszaküldi a saját UTC idejét, te pedig a kliensen a két érték különbségét ofszetként figyelembe veszed minden dátummal kapcsolatos megjelenítésben (szerveroldali logikában persze kizárólag a szerver idejét használod).

    Köszönöm, ennek utána nézek

  • dqdb
    nagyúr

    Köszi az infót. És be lehet állítani valahogy, hogy ne a kliens adataival dolgozzon?
    Ugyanis roppant fontos volna nekem, hogy ténylegesen másodpercre pontosan a helyes időt nézze a műveletekhez

    Egy XHR/fetch kérésben a szervernek felküldöd a kliens UTC időt, az válaszban visszaküldi a saját UTC idejét, te pedig a kliensen a két érték különbségét ofszetként figyelembe veszed minden dátummal kapcsolatos megjelenítésben (szerveroldali logikában persze kizárólag a szerver idejét használod).

  • Mr. Y
    őstag

    A rendszeridőt használja, szóval ha rosszul van beállítva az idő a kliensen (manapság azért ezt már nem kézzel állítjuk be), akkor rossz értékkel fog dolgozni.

    Köszi az infót. És be lehet állítani valahogy, hogy ne a kliens adataival dolgozzon?
    Ugyanis roppant fontos volna nekem, hogy ténylegesen másodpercre pontosan a helyes időt nézze a műveletekhez

  • Taci
    addikt

    Sziasztok!

    Lehet, hülye kérdés, de! Amikor egy Weboldal annak betöltése folyamán elindít egy JS-t, ami lekérdezi az aktuális dátumot, órát, percet, stb., az olyankor az internetről szedi az információt, vagy az őt betöltő eszköztől kérdezi meg?

    A rendszeridőt használja, szóval ha rosszul van beállítva az idő a kliensen (manapság azért ezt már nem kézzel állítjuk be), akkor rossz értékkel fog dolgozni.

  • Mr. Y
    őstag

    Sziasztok!

    Lehet, hülye kérdés, de! Amikor egy Weboldal annak betöltése folyamán elindít egy JS-t, ami lekérdezi az aktuális dátumot, órát, percet, stb., az olyankor az internetről szedi az információt, vagy az őt betöltő eszköztől kérdezi meg?

  • nevemfel
    senior tag

    Köszönöm a tippeket!
    @Taci igen erre én is gondoltam, csak talán lenne erre rövidebb kód is, nem?
    @nevemfel igen igen, ez világos, csak nem értem, ezt hogy kéne a buttonhoz hozzárendelni? Valahogy nem jött össze nekem még a dolog( igaz eddig csak olyasmiket csináltam, ahol a gomb egy CSS tulajdonságot változtatott, pl animációt indított el stb. )

    Csinálsz egy objektumot, nyelvenként, belerakod a különféle feliratokat, aztán azt használod amelyik az aktuálisan kiválasztott nyelv.

    Hét napjai, hónapok elnevezését még ki tudod nyerni a Date és a localization API-ból, de hogyan fordítasz le bármilyen más feliratot?

  • Taci
    addikt

    Köszönöm a tippeket!
    @Taci igen erre én is gondoltam, csak talán lenne erre rövidebb kód is, nem?
    @nevemfel igen igen, ez világos, csak nem értem, ezt hogy kéne a buttonhoz hozzárendelni? Valahogy nem jött össze nekem még a dolog( igaz eddig csak olyasmiket csináltam, ahol a gomb egy CSS tulajdonságot változtatott, pl animációt indított el stb. )

    Rakj össze JSFiddle-ben egy példát, úgy könnyebb lesz, mert azt tudjuk szerkeszteni, és azzal tippeket/megoldást adni.

  • e.vit
    csendes tag

    Köszönöm a tippeket!
    @Taci igen erre én is gondoltam, csak talán lenne erre rövidebb kód is, nem?
    @nevemfel igen igen, ez világos, csak nem értem, ezt hogy kéne a buttonhoz hozzárendelni? Valahogy nem jött össze nekem még a dolog( igaz eddig csak olyasmiket csináltam, ahol a gomb egy CSS tulajdonságot változtatott, pl animációt indított el stb. )

  • nevemfel
    senior tag

    Sziasztok! A következőben szeretnék segítséget kérni:
    készítettem egy egyszerű naptárat. Szeretnék mellé tenni két-három gombot, amikre kattintva a naptár nyelve változtatható.
    Most ugye "default", tehát magyarul írja ki a hónapot/napot.

    const dayName = new Date().toLocaleString("default",{weekday:"long"}) ;
    const monthName = new Date().toLocaleString("default",{month:"long"});

    Mondjuk lenne egy német "de-DE" , egy orosz "ru-RU" stb. Már sikerült belezavarodnom, mert eddig amiket próbáltam, nem voltak jók.

    Nekem ez:

    new Date().toLocaleString("de-DE",{weekday:"long"});

    Firefoxban azt adja vissza, hogy "Dienstag".

  • Taci
    addikt

    Sziasztok! A következőben szeretnék segítséget kérni:
    készítettem egy egyszerű naptárat. Szeretnék mellé tenni két-három gombot, amikre kattintva a naptár nyelve változtatható.
    Most ugye "default", tehát magyarul írja ki a hónapot/napot.

    const dayName = new Date().toLocaleString("default",{weekday:"long"}) ;
    const monthName = new Date().toLocaleString("default",{month:"long"});

    Mondjuk lenne egy német "de-DE" , egy orosz "ru-RU" stb. Már sikerült belezavarodnom, mert eddig amiket próbáltam, nem voltak jók.

    És ha úgy csinálnád, hogy megnézed, a
    const d = new Date();
    var month = d.getMonth();
    mit ad vissza, és egy if-else vagy switch-case módszerrel úgy íratod ki, hogy
    - ha a month + 1 == 1 (a d.getMonth() 0-től 11-ig adja vissza a hónap számát)
    - és ha magyar a nyelv, akkor január a sztring,
    - ha angol, akkor January
    - stb.?

  • e.vit
    csendes tag

    Sziasztok! A következőben szeretnék segítséget kérni:
    készítettem egy egyszerű naptárat. Szeretnék mellé tenni két-három gombot, amikre kattintva a naptár nyelve változtatható.
    Most ugye "default", tehát magyarul írja ki a hónapot/napot.

    const dayName = new Date().toLocaleString("default",{weekday:"long"}) ;
    const monthName = new Date().toLocaleString("default",{month:"long"});

    Mondjuk lenne egy német "de-DE" , egy orosz "ru-RU" stb. Már sikerült belezavarodnom, mert eddig amiket próbáltam, nem voltak jók.

  • Taci
    addikt

    Sziasztok!

    Van egy Windows és Android alatti böngőszőkben jól működő keresőm, ami viszont Safarin nem 100%-os.

    Első körben kezdeném mondjuk azzal, hogy nem ismeri fel a keyup eventet:

    elementMainSearch.addEventListener("keyup", function(event) {
      console.log('Typing to searchbox.');
    }

    Ez például csak akkor ír a konzolba Safari alatt, ha Shift vagy Ctrl gombokat nyomok. Semmi másra nem reagál. A keresőmezőbe persze beírja amit írok, csak a lenyomáshoz (felemeléshez) kötött funkciókat nem hívja meg.

    Hogyan lehet ezt megoldani? Hátha ti már tapasztaltátok (és megoldottátok ezt).

    Aztán később van egy feltétel, ahol az Enter leütését vizsgálom:
    if (event.keyCode === 13) {}
    Nem tudom, abba is belerondít-e, odáig még "nem jutott el", de inkább már nem írok külön bejegyzést erről.

    Köszi!

    Annyira haladtam a témában, hogy valamiért a keyup-ot nem szereti, viszont a keydown-nal és a keypress-szel nincs baja. (Fórumbejegyzésekben találtam ezt az infót, kipróbáltam, és valóban.)

    Viszont azért használtam keyup-ot, mert az esemény után figyeltem, hogy változik-e a keresőmező tartalma (nem-e marad üres), és ha karatert ír be a user (tehát nem csak belekattint, és nyom egy shift-et), akkor megjelenik a mező törlése gomb.

    var elementMainSearch = document.getElementById("mainSearch");
    elementMainSearch.addEventListener("keyup", function(event) {
      var elementMainSearchValue = elementMainSearch.elements[0].value;
      console.log('elementMainSearchValue: ' + elementMainSearchValue);
      if (elementMainSearchValue != ""){
        //törlés gomb megjelenítése
      }
    }

    Így ha beírtam, hogy q, akkor a konzolba kiírta, hogy elementMainSearchValue: q, és megjelent a törlés gomb.

    Viszont így, hogy Safarival ez valamiért nem működik, muszáj vagyok keydown-ra vagy keypress-re cserélni a keyup-ot.
    Ezekkel viszont az a baj, hogy az eventjük után még nem változik a keresőmező tartalma.
    Tehát a fenti kód keydown-nal vagy keypress-szel ezeket az eredményeket adja:
    q --> elementMainSearchValue:  
    qw --> elementMainSearchValue: q
    qwe --> elementMainSearchValue: qw
    stb.

    Így ha csak 1 karaktert ír be a user a keresőmezőbe, nem lesz aktív a gomb, mert kell mellé még egy leütés.

    Hogyan tudom szerintetek ezt megoldani?
    Akár más struktúrával is. (Elindultam a beírt keycode-ok vizsgálatával (Ctrl - 17, Shift - 16, Tab - 9, Enter/Return - 13, Option - 18, Command - 91 stb.), de ott túl sokat kell lekezelni (minden gombot, ami szám vagy betű), az a megoldás nem tetszik.)

    UPD.:
    Az input event lesz a jó, úgy látom.

  • Taci
    addikt

    Sziasztok!

    Van egy Windows és Android alatti böngőszőkben jól működő keresőm, ami viszont Safarin nem 100%-os.

    Első körben kezdeném mondjuk azzal, hogy nem ismeri fel a keyup eventet:

    elementMainSearch.addEventListener("keyup", function(event) {
      console.log('Typing to searchbox.');
    }

    Ez például csak akkor ír a konzolba Safari alatt, ha Shift vagy Ctrl gombokat nyomok. Semmi másra nem reagál. A keresőmezőbe persze beírja amit írok, csak a lenyomáshoz (felemeléshez) kötött funkciókat nem hívja meg.

    Hogyan lehet ezt megoldani? Hátha ti már tapasztaltátok (és megoldottátok ezt).

    Aztán később van egy feltétel, ahol az Enter leütését vizsgálom:
    if (event.keyCode === 13) {}
    Nem tudom, abba is belerondít-e, odáig még "nem jutott el", de inkább már nem írok külön bejegyzést erről.

    Köszi!

    Can I Use szerint pedig mennie kellene... [link]

  • Taci
    addikt

    Sziasztok!

    Van egy Windows és Android alatti böngőszőkben jól működő keresőm, ami viszont Safarin nem 100%-os.

    Első körben kezdeném mondjuk azzal, hogy nem ismeri fel a keyup eventet:

    elementMainSearch.addEventListener("keyup", function(event) {
      console.log('Typing to searchbox.');
    }

    Ez például csak akkor ír a konzolba Safari alatt, ha Shift vagy Ctrl gombokat nyomok. Semmi másra nem reagál. A keresőmezőbe persze beírja amit írok, csak a lenyomáshoz (felemeléshez) kötött funkciókat nem hívja meg.

    Hogyan lehet ezt megoldani? Hátha ti már tapasztaltátok (és megoldottátok ezt).

    Aztán később van egy feltétel, ahol az Enter leütését vizsgálom:
    if (event.keyCode === 13) {}
    Nem tudom, abba is belerondít-e, odáig még "nem jutott el", de inkább már nem írok külön bejegyzést erről.

    Köszi!

  • laracroft
    senior tag

    1. Amit megadsz callback a duplikálás check esetében, azt a függvényt ugyanúgy meg kell adnod az új sor adott elemének is (enélkül az eseménykezelő csak az első betöltésnél már meglévő HTML elemekre lesz érvényes. Ehhez az kell, hogy nem egy anonim függvényt adsz át, hanem egy már létezőt:

    function checkNullAndDuplicates() {
    var value = $(this).val();
    $('[name="zona_szam[]"]').not(this).each(function(){
    if($(this).val() == value || value=="0") {
    document.getElementById("error").style.display= '';
    }
    })
    }
    }
    $('[name="zona_szam[]"]').on('change', checkNullAndDuplicates);

    Ezt a függvényt kell az új DOM elemnek odaadni. Mivel a mostani módszered egy sima HTML stringet ad hozzá a DOM-hoz, ez elég körülményes, de azt meg tudod egyszerűen csinálni, hogy egy sor hozzáadása után lekéred az összes [name="zona_szam[]"] elemet, és megadod az onchange eseménykezelőnek a fent definiált függvényt.

    2. A change eseménykezelőben megnézed, hogy jó-e az érték, és ha igen, akkor átírod az error elemnek a style.display property-jét 'none'-ra.

    Köszönöm a gyors választ ;)
    Igyekszem felfogni :)

  • cattus
    addikt

    Sziasztok
    Van egy táblázatom, ahol a sorszámnak egyedinek kell lennie és nem lehet 0 sem.
    2 dologot nem tudok még: :B
    1. Azokra a sorokra nem működik, amiket utólag adok hozzá.
    2. A hibára figyelmeztető üzenet szeretném, ha eltűnne javításra, ne kelljen X-re kattintani.
    előre is köszi ;)

    1. Amit megadsz callback a duplikálás check esetében, azt a függvényt ugyanúgy meg kell adnod az új sor adott elemének is (enélkül az eseménykezelő csak az első betöltésnél már meglévő HTML elemekre lesz érvényes. Ehhez az kell, hogy nem egy anonim függvényt adsz át, hanem egy már létezőt:

    function checkNullAndDuplicates() {
    var value = $(this).val();
    $('[name="zona_szam[]"]').not(this).each(function(){
    if($(this).val() == value || value=="0") {
    document.getElementById("error").style.display= '';
    }
    })
    }
    }
    $('[name="zona_szam[]"]').on('change', checkNullAndDuplicates);

    Ezt a függvényt kell az új DOM elemnek odaadni. Mivel a mostani módszered egy sima HTML stringet ad hozzá a DOM-hoz, ez elég körülményes, de azt meg tudod egyszerűen csinálni, hogy egy sor hozzáadása után lekéred az összes [name="zona_szam[]"] elemet, és megadod az onchange eseménykezelőnek a fent definiált függvényt.

    2. A change eseménykezelőben megnézed, hogy jó-e az érték, és ha igen, akkor átírod az error elemnek a style.display property-jét 'none'-ra.

  • laracroft
    senior tag

    Sziasztok
    Van egy táblázatom, ahol a sorszámnak egyedinek kell lennie és nem lehet 0 sem.
    2 dologot nem tudok még: :B
    1. Azokra a sorokra nem működik, amiket utólag adok hozzá.
    2. A hibára figyelmeztető üzenet szeretném, ha eltűnne javításra, ne kelljen X-re kattintani.
    előre is köszi ;)

  • lanszelot
    addikt

    iFrame YT videóváltásra szerintem ez a legegyszerűbb JS kód.

    Nem váltani kellett, hanem play/pause gombot raktam hozzá.
    Azt pedig iframe-val nem tudtam megcsinálni, csak api-val.

    Video cserélgetésre van egyszerűbb: js-el cserélgeted a yt azonosító kódot a link közepén.
    4 sor js kód az egész, és html is kevesebb, mivel a iframe kódot js dobja be.
    Egyszerűbb és rövidebb is :K

  • Mr. Y
    őstag

    player.cueVideoById(videoId) - ezen izzadtam is jó pár percet, akkor ezert nem ertettem. :D
    Van még pár dolog ami nem világos, de mára már igen kifáradt az agyam.
    Szépen átrágom magam rajta, mert nagyon nem értem mi merre miert hogyan.

    Ezt iframe -val csináltam először meg, de ahhoz nem tudtam lejátszó gombot rendelni.
    Majd youtube oldalán írták, hogy api-val kell. Az meg nekem magas, így csak kimásoltam, és próbálgattam. :B

    Már addig eljutottam, hogy kiszedtem a teljes oldalt amit az a pár sor lerenderel, azzal akartam megoldani, mert ott iframe van ismét, és azzal meg tudom oldani. De addigra te megcsináltad, és most azzal izzadok :D

    Azert elszomorít, hogy töb mint 1 év után a függvények még mindig kifognak rajtam :((
    De lesz ez még így se :DDD

    iFrame YT videóváltásra szerintem ez a legegyszerűbb JS kód.

  • lanszelot
    addikt

    A te példádban az volt a fő probléma, hogy a youtube inicializációs hívásába tetted bele a video id-ját egy globális változóból. Aztán annak a változónak az értékét ugyan változtattad, de a youtube lejátszó script attól még nem figyeli folyamatosan azt a változót, mert miért is tenné?

    Ha a lejátszóban videót akarsz váltani, azt csak úgy tudod megtenni, ha meghívod a player.cueVideoById(videoId) vagy player.loadVideoById(videoId) metódust.

    player.cueVideoById(videoId) - ezen izzadtam is jó pár percet, akkor ezert nem ertettem. :D
    Van még pár dolog ami nem világos, de mára már igen kifáradt az agyam.
    Szépen átrágom magam rajta, mert nagyon nem értem mi merre miert hogyan.

    Ezt iframe -val csináltam először meg, de ahhoz nem tudtam lejátszó gombot rendelni.
    Majd youtube oldalán írták, hogy api-val kell. Az meg nekem magas, így csak kimásoltam, és próbálgattam. :B

    Már addig eljutottam, hogy kiszedtem a teljes oldalt amit az a pár sor lerenderel, azzal akartam megoldani, mert ott iframe van ismét, és azzal meg tudom oldani. De addigra te megcsináltad, és most azzal izzadok :D

    Azert elszomorít, hogy töb mint 1 év után a függvények még mindig kifognak rajtam :((
    De lesz ez még így se :DDD

  • nevemfel
    senior tag

    Köszönöm szépen.
    Igen, ezt ismerem.
    Az enyem mind a 2 esetben valamilyen eseményre reagált, tehát nem hívhatja meg az első.
    De az első a második előtt hajtódott végre, tehát elvileg működnie kellett volna, de ahogy írták egyszer futott csak le egy 3ik függvény, ami kintre mutatott, és onnan fut /youtube api embed/ és azt nem tudom hogyan merre.Mert a youtube oldalról másoltam csak, de azt nem tudom hogy működik.
    Ebből adódott a gond.

    Nem igazán értek a js-hez, csak magamnak tanulgatom.

    A te példádban az volt a fő probléma, hogy a youtube inicializációs hívásába tetted bele a video id-ját egy globális változóból. Aztán annak a változónak az értékét ugyan változtattad, de a youtube lejátszó script attól még nem figyeli folyamatosan azt a változót, mert miért is tenné?

    Ha a lejátszóban videót akarsz váltani, azt csak úgy tudod megtenni, ha meghívod a player.cueVideoById(videoId) vagy player.loadVideoById(videoId) metódust.

  • nevemfel
    senior tag

    Először az egyik függvény fut le és utána az, aminek használnia kellene

    Én így szoktam csinálni ezt a részt, ha jól értem:

    var x = 3;
    function myFunction () {
    x = x + 3;
    fuggveny(x);
    }
    function fuggveny(x){
    var y = x;
    }

    Így csinálom, hogy az egyik függvény hívja meg a másokat és így küldöm át az értéket egyikből a másikba.

    Jelen példánál is tök fölösleges átadni x-et paraméterként, hiszen x-hez, mivel globális változó, hozzáfér a myFunction és fuggveny is.

    Persze érdemes kerülni a globális változók használatát, csak nem így.

  • lanszelot
    addikt

    Először az egyik függvény fut le és utána az, aminek használnia kellene

    Én így szoktam csinálni ezt a részt, ha jól értem:

    var x = 3;
    function myFunction () {
    x = x + 3;
    fuggveny(x);
    }
    function fuggveny(x){
    var y = x;
    }

    Így csinálom, hogy az egyik függvény hívja meg a másokat és így küldöm át az értéket egyikből a másikba.

    Köszönöm szépen.
    Igen, ezt ismerem.
    Az enyem mind a 2 esetben valamilyen eseményre reagált, tehát nem hívhatja meg az első.
    De az első a második előtt hajtódott végre, tehát elvileg működnie kellett volna, de ahogy írták egyszer futott csak le egy 3ik függvény, ami kintre mutatott, és onnan fut /youtube api embed/ és azt nem tudom hogyan merre.Mert a youtube oldalról másoltam csak, de azt nem tudom hogy működik.
    Ebből adódott a gond.

    Nem igazán értek a js-hez, csak magamnak tanulgatom.

  • Mr. Y
    őstag

    Először is nagyon szépen köszönöm :R
    Kicsit nehéz nekem, kell pár nap, hogy kibogarásszam, mi miért merre.
    /A video mérete pici lett vmiért, és nem nagyon látom az enyem miert nem működött./
    Legalább tanuok vele :)

    Először az egyik függvény fut le és utána az, aminek használnia kellene

    Én így szoktam csinálni ezt a részt, ha jól értem:

    var x = 3;
    function myFunction () {
    x = x + 3;
    fuggveny(x);
    }
    function fuggveny(x){
    var y = x;
    }

    Így csinálom, hogy az egyik függvény hívja meg a másokat és így küldöm át az értéket egyikből a másikba.

  • lanszelot
    addikt

    Na, gyorsan átírtam. Messze van a tökéletestől, de többre már tényleg nincs időm.

    <script>
            // video api
            // Load the IFrame Player API code asynchronously.
            var tag = document.createElement("script");
            tag.src = "https://www.youtube.com/player_api";
            var firstScriptTag = document.getElementsByTagName("script")[0];
            firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
            // Replace the 'ytplayer' element with an <iframe> and
            // YouTube player after the API code downloads.
            var player, btn;
            function onYouTubePlayerAPIReady() {
                player = new YT.Player("ytplayer", {
                    height: "100%",
                    width: "100%",
                    playerVars: {
                        loop: 1,
                        controls: 0,
                        showinfo: 0,
                        autohide: 1,
                        modestbranding: 1,
                        vq: "hd1080",
                    },
                    events: {
                        // Ezzel lehet reagálni a "videó betöltött" eseményre
                        onReady: function (event) {
                            btn = document.getElementById("gomb");
                            // Reagálás kattintás eseményre
                            btn.addEventListener("click", function () {
                                if (player.getPlayerState() === 1) {
                                    event.target.pauseVideo();
                                } else {
                                    event.target.playVideo();
                                }
                            });
                        },
                        onStateChange: function () {
                            btn = document.getElementById("gomb");
                            if (player.getPlayerState() === 1) {
                                btn.innerHTML = "Szünet";
                            } else {
                                btn.innerHTML = "Indítás";
                            }
                        }
                    },
                    videoId: "",
                });
            }
            // video api vege
            // MODAL kezdete
            const openModalButtons = document.querySelectorAll("[data-modal-target]");
            const closeModalButtons = document.querySelectorAll("[data-close-button]");
            const overlay = document.getElementById("overlay");
            openModalButtons.forEach(function (button) {
                button.addEventListener("click", function () {
                    const modal = document.querySelector(button.dataset.modalTarget);
                    openModal(modal, button.id);
                })
            })
            overlay.addEventListener("click", function () {
                const modals = document.querySelectorAll(".modal.active")
                modals.forEach(function (modal) {
                    closeModal(modal);
                })
            })
            closeModalButtons.forEach(function (button) {
                button.addEventListener("click", function () {
                    const modal = button.closest(".modal");
                    closeModal(modal);
                })
            })
            function openModal(modal, videoId) {
                modal.classList.add("active");
                overlay.classList.add("active");
                player.cueVideoById(videoId);
            }
            function closeModal(modal) {
                modal.classList.remove("active");
                overlay.classList.remove("active");
                player.pauseVideo();
            }
        </script>

    Először is nagyon szépen köszönöm :R
    Kicsit nehéz nekem, kell pár nap, hogy kibogarásszam, mi miért merre.
    /A video mérete pici lett vmiért, és nem nagyon látom az enyem miert nem működött./
    Legalább tanuok vele :)

  • nevemfel
    senior tag

    Na, gyorsan átírtam. Messze van a tökéletestől, de többre már tényleg nincs időm.

    <script>
            // video api
            // Load the IFrame Player API code asynchronously.
            var tag = document.createElement("script");
            tag.src = "https://www.youtube.com/player_api";
            var firstScriptTag = document.getElementsByTagName("script")[0];
            firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
            // Replace the 'ytplayer' element with an <iframe> and
            // YouTube player after the API code downloads.
            var player, btn;
            function onYouTubePlayerAPIReady() {
                player = new YT.Player("ytplayer", {
                    height: "100%",
                    width: "100%",
                    playerVars: {
                        loop: 1,
                        controls: 0,
                        showinfo: 0,
                        autohide: 1,
                        modestbranding: 1,
                        vq: "hd1080",
                    },
                    events: {
                        // Ezzel lehet reagálni a "videó betöltött" eseményre
                        onReady: function (event) {
                            btn = document.getElementById("gomb");
                            // Reagálás kattintás eseményre
                            btn.addEventListener("click", function () {
                                if (player.getPlayerState() === 1) {
                                    event.target.pauseVideo();
                                } else {
                                    event.target.playVideo();
                                }
                            });
                        },
                        onStateChange: function () {
                            btn = document.getElementById("gomb");
                            if (player.getPlayerState() === 1) {
                                btn.innerHTML = "Szünet";
                            } else {
                                btn.innerHTML = "Indítás";
                            }
                        }
                    },
                    videoId: "",
                });
            }
            // video api vege
            // MODAL kezdete
            const openModalButtons = document.querySelectorAll("[data-modal-target]");
            const closeModalButtons = document.querySelectorAll("[data-close-button]");
            const overlay = document.getElementById("overlay");
            openModalButtons.forEach(function (button) {
                button.addEventListener("click", function () {
                    const modal = document.querySelector(button.dataset.modalTarget);
                    openModal(modal, button.id);
                })
            })
            overlay.addEventListener("click", function () {
                const modals = document.querySelectorAll(".modal.active")
                modals.forEach(function (modal) {
                    closeModal(modal);
                })
            })
            closeModalButtons.forEach(function (button) {
                button.addEventListener("click", function () {
                    const modal = button.closest(".modal");
                    closeModal(modal);
                })
            })
            function openModal(modal, videoId) {
                modal.classList.add("active");
                overlay.classList.add("active");
                player.cueVideoById(videoId);
            }
            function closeModal(modal) {
                modal.classList.remove("active");
                overlay.classList.remove("active");
                player.pauseVideo();
            }
        </script>

  • nevemfel
    senior tag

    Tehát fogalmam sincs hogy működik az a rész, csak innen ki lett másolva és ennyi.
    Valószínű ezért nem tudom mit kezdjek vele, hogy kicserélje a videoId -t :B

    Azt javaslom, hogy keress kész scriptet erre, mert sokmindent át kell írni a scriptben. Openmodalra kellene betölteni a videót, closemodalra leállítani, a player eventjeire rakni a lejátszógomb állapotának állítását (indítás/leállítás felirat).

    Ha lenne időm, átírnám én neked, de most nem nagyon érek rá.

  • lanszelot
    addikt

    Az onYouTubePlayerAPIReady csak egyszer fut le betöltődéskor.

    Tehát fogalmam sincs hogy működik az a rész, csak innen ki lett másolva és ennyi.
    Valószínű ezért nem tudom mit kezdjek vele, hogy kicserélje a videoId -t :B

  • nevemfel
    senior tag

    Hello,
    Nem, nem ez a gond.
    Függvényen kívül létre hoztam a változót "var".
    Függvényen belül megváltoztatom a változót, majd azt a kapott változót egy másik függvényben szeretném használni. Először az a függvény fut le, ahol megváltozik a változó.
    Majd csak utána a másik ahol használni szeretném.
    Ahogy működnie kellene: globális változó létre hozva.
    Bent a függvényben megváltozik.
    Mivel globális, ezért nem csak a függvényben tudom használni.
    Másik függvényben használom a megváltozott változót.
    Ahogy működik:
    globális változó létre hozva.
    Bent a függvényben megváltozik.
    A függvényen kívül ismét a régi értékkel létezik
    Másik függvényben használom a változatlan változót.

    Biztos hogy először az a függvény fut le, ami megváltoztatja, és meg is változik bent.
    Át írtam .onmouseover -re, azaz már klikkelnem se kell, a változó megváltozik, alert-el kiírattam , és megáltozott, de ha a gombra klikkelek, megis az eredeti változót használja.

    Nem tud ismét lefutni a változó érték adása, nincs függvényben, úgy van mint a példában, nem futhat le többször.

    Tudom hogy én hibázom vhol, csak nem találom hol.

    codepen

    Az onYouTubePlayerAPIReady csak egyszer fut le betöltődéskor.

  • lanszelot
    addikt

    Van egy olyan sejtésem, hogy a kérdezőnek az alábbi problémája van:

    var x = 7;
    function myFunction() {
    x = x+3;
    }

    És minden kattintás után azt az eredményt kapja, hogy 10. Ő pedig azt szeretné, hogy a második kattintáskor már 13 legyen, a harmadiknál 16 és így tovább. Én úgy tudom, hogy vagy külső változóba mentve (DIV innerHTML) vagy window.localStorage megoldással lehetne kivitelezni, amit szeretne.
    Viszont a kérdése alapján van erre egy harmadik opció is. Ezt pl én sem tudom :)

    Hello,
    Nem, nem ez a gond.
    Függvényen kívül létre hoztam a változót "var".
    Függvényen belül megváltoztatom a változót, majd azt a kapott változót egy másik függvényben szeretném használni. Először az a függvény fut le, ahol megváltozik a változó.
    Majd csak utána a másik ahol használni szeretném.
    Ahogy működnie kellene: globális változó létre hozva.
    Bent a függvényben megváltozik.
    Mivel globális, ezért nem csak a függvényben tudom használni.
    Másik függvényben használom a megváltozott változót.
    Ahogy működik:
    globális változó létre hozva.
    Bent a függvényben megváltozik.
    A függvényen kívül ismét a régi értékkel létezik
    Másik függvényben használom a változatlan változót.

    Biztos hogy először az a függvény fut le, ami megváltoztatja, és meg is változik bent.
    Át írtam .onmouseover -re, azaz már klikkelnem se kell, a változó megváltozik, alert-el kiírattam , és megáltozott, de ha a gombra klikkelek, megis az eredeti változót használja.

    Nem tud ismét lefutni a változó érték adása, nincs függvényben, úgy van mint a példában, nem futhat le többször.

    Tudom hogy én hibázom vhol, csak nem találom hol.

    codepen

  • nevemfel
    senior tag

    Van egy olyan sejtésem, hogy a kérdezőnek az alábbi problémája van:

    var x = 7;
    function myFunction() {
    x = x+3;
    }

    És minden kattintás után azt az eredményt kapja, hogy 10. Ő pedig azt szeretné, hogy a második kattintáskor már 13 legyen, a harmadiknál 16 és így tovább. Én úgy tudom, hogy vagy külső változóba mentve (DIV innerHTML) vagy window.localStorage megoldással lehetne kivitelezni, amit szeretne.
    Viszont a kérdése alapján van erre egy harmadik opció is. Ezt pl én sem tudom :)

    És minden kattintás után azt az eredményt kapja, hogy 10.

    Hát de hogy adna már minden kattintásra 10-et?

  • Mr. Y
    őstag

    Ha csak kódmorzsákat osztasz meg, senki nem fog tudni segíteni.

    Ha egy függvény nem lát egy adott változót, annak lényegében három oka lehet:

    1. Láthatóság (scope). Javascriptben minden függvény automatikusan látja a rajta kívül deklarált változókat. Ha egy változót egy függvényben deklarálsz, az látható lesz azon függvények számára, amit ezen a függvényen belül deklarálsz. A globális változó automatikusan látható minden függvény számára.

    2. Elfedés. Ha van egy külső változód, amit az adott függvénynek látnia kell, de te az adott függvényen belül is deklarálsz egy pontosan ugyanolyan nevű változót, akkor onnantól a függvény számára hozzáférhetetlenné válik a külső változó. Innentől az adott néven már csak a saját lokális változódat látod, ami egy teljesen külön entitás.

    3. Sorrendiség. Azt hiszed, hogy az adott változó már megkapta a várt értéket, de valamiért a változóba írás később történik meg, mint a változó értékének kiolvasása.

    Van egy olyan sejtésem, hogy a kérdezőnek az alábbi problémája van:

    var x = 7;
    function myFunction() {
    x = x+3;
    }

    És minden kattintás után azt az eredményt kapja, hogy 10. Ő pedig azt szeretné, hogy a második kattintáskor már 13 legyen, a harmadiknál 16 és így tovább. Én úgy tudom, hogy vagy külső változóba mentve (DIV innerHTML) vagy window.localStorage megoldással lehetne kivitelezni, amit szeretne.
    Viszont a kérdése alapján van erre egy harmadik opció is. Ezt pl én sem tudom :)

  • nevemfel
    senior tag

    Függvényen kívül van létrehozva a változó.
    Úgy is van beírva.
    De kell még valami, csak azt elfelejtettem mi.
    Mert így ugye lefut az egész, a fuggveny viszont csak klikkeléskor fut le, igaz a másik is csak azután, de a függvényen kívül az oldalbetöltéskori változó érték marad meg. És ide kell a csavar, amit elfelejtettem.

    Ha csak kódmorzsákat osztasz meg, senki nem fog tudni segíteni.

    Ha egy függvény nem lát egy adott változót, annak lényegében három oka lehet:

    1. Láthatóság (scope). Javascriptben minden függvény automatikusan látja a rajta kívül deklarált változókat. Ha egy változót egy függvényben deklarálsz, az látható lesz azon függvények számára, amit ezen a függvényen belül deklarálsz. A globális változó automatikusan látható minden függvény számára.

    2. Elfedés. Ha van egy külső változód, amit az adott függvénynek látnia kell, de te az adott függvényen belül is deklarálsz egy pontosan ugyanolyan nevű változót, akkor onnantól a függvény számára hozzáférhetetlenné válik a külső változó. Innentől az adott néven már csak a saját lokális változódat látod, ami egy teljesen külön entitás.

    3. Sorrendiség. Azt hiszed, hogy az adott változó már megkapta a várt értéket, de valamiért a változóba írás később történik meg, mint a változó értékének kiolvasása.

  • lanszelot
    addikt

    Akkor függvényen kívül hozd létre a változót.

    <script>
    var vmi = "";

    function egy() {
      vmi = "Evésivás";
    }

    function ketto() {
      console.log(vmi);
    }

    egy();
    ketto();
    </script>

    Ennek azt kell kiírnia, hogy Evésivás, mert így a változó globális lesz, azaz minden function látja.

    Függvényen kívül van létrehozva a változó.
    Úgy is van beírva.
    De kell még valami, csak azt elfelejtettem mi.
    Mert így ugye lefut az egész, a fuggveny viszont csak klikkeléskor fut le, igaz a másik is csak azután, de a függvényen kívül az oldalbetöltéskori változó érték marad meg. És ide kell a csavar, amit elfelejtettem.

  • nevemfel
    senior tag

    Igen, annak a változónak az értékét szeretném a függvényen kívül használni.

    Valahogy meg lehet oldani, csak nem találom ahova leírtam régen. Annyira emlékszem, hogy kint kell létre hozni a változót, de a többi nem ugrik be.

    Az értékét megkapja a változó, mielőtt a másik függvény használná, tehát azzal nem lenne gond.
    Nem tehetem a másik függvényt bele ebbe, mert akkor nem működik.

    Akkor függvényen kívül hozd létre a változót.

    <script>
    var vmi = "";

    function egy() {
      vmi = "Evésivás";
    }

    function ketto() {
      console.log(vmi);
    }

    egy();
    ketto();
    </script>

    Ennek azt kell kiírnia, hogy Evésivás, mert így a változó globális lesz, azaz minden function látja.

  • lanszelot
    addikt

    Sehogy. A példádban a function buton a külső vmi változóba ír.

    Igen, annak a változónak az értékét szeretném a függvényen kívül használni.

    Valahogy meg lehet oldani, csak nem találom ahova leírtam régen. Annyira emlékszem, hogy kint kell létre hozni a változót, de a többi nem ugrik be.

    Az értékét megkapja a változó, mielőtt a másik függvény használná, tehát azzal nem lenne gond.
    Nem tehetem a másik függvényt bele ebbe, mert akkor nem működik.

  • nevemfel
    senior tag

    Hello,
    Hogy tudom a function ban lévő "vmi" változót a function-on kívül használni?
    var vmi ="";
    function buton(e) {   
    if (e.target.tagName == 'BUTTON') {        vmi = e.target.id;       
    }}

    Sehogy. A példádban a function buton a külső vmi változóba ír.

Új hozzászólás Aktív témák

Hirdetés