-
9200 - 9101
10361 - 10301 10300 - 10201 10200 - 10101 10100 - 10001 10000 - 9901 9900 - 9801 9800 - 9701 9700 - 9601 9600 - 9501 9500 - 9401 9400 - 9301 9300 - 9201 9200 - 9101 9100 - 9001 9000 - 8901 8900 - 8801 8800 - 8701 8700 - 8601 8600 - 8501 8500 - 8401 8400 - 8301 8300 - 8201 8200 - 8101 8100 - 8001 8000 - 6001 6000 - 4001 4000 - 2001 2000 - 1
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
-
Frissítve: 2014-02-25 10:20 Téma összefoglaló
JavaScript != Java (A JavaScript nem összekeverendő a Javával, két különböző programozási nyelvről van szó!)
Új hozzászólás Aktív témák
-
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!
) -
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
No igen, ezért is írtam, hogy itt nézd. A böngészőben localhoston minden villámgyors

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.
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
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
-
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
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 értekKö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
-
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 értekKö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
É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
-
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
-
_ak_
addikt
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.
-
inf3rno
nagyúr
-
Mr. Y
őstag
Köszönöm a válaszokat!
-
cstomee
tag
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
talán az input+button miatt mert egy form?
@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
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).
-
martonx
veterán
-
inf3rno
nagyúr
-
inf3rno
nagyúr
-
nevemfel
senior tag
-
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:
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. -
martonx
veterán
-
_ak_
addikt
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:
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
É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!

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!

-
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
-
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
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
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
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
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
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 -
e.vit
csendes tag
Köszi szépen a tippeket, még elbénázgatok vele

-
Taci
addikt
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 amonth + 1 == 1(a d.getMonth() 0-től 11-ig adja vissza a hónap számát)
- és ha magyar a nyelv, akkorjanuára sztring,
- ha angol, akkorJanuary
- 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 akeydown-nal és akeypress-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, hogyelementMainSearchValue: 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:qqwe--> 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.:
Azinputevent 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:
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:
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
-
Mr. Y
őstag
player.cueVideoById(videoId) - ezen izzadtam is jó pár percet, akkor ezert nem ertettem.
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.
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
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
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.
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.
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
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
-
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 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ényreonReady: function (event) {btn = document.getElementById("gomb");// Reagálás kattintás eseményrebtn.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 kezdeteconst 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

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ényreonReady: function (event) {btn = document.getElementById("gomb");// Reagálás kattintás eseményrebtn.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 kezdeteconst 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
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
-
lanszelot
addikt
-
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.
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ár13legyen, a harmadiknál16és így tovább. Én úgy tudom, hogy vagy külső változóba mentve (DIV innerHTML) vagywindow.localStoragemegoldá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.
-
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ár13legyen, a harmadiknál16és így tovább. Én úgy tudom, hogy vagy külső változóba mentve (DIV innerHTML) vagywindow.localStoragemegoldá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ár13legyen, a harmadiknál16és így tovább. Én úgy tudom, hogy vagy külső változóba mentve (DIV innerHTML) vagywindow.localStoragemegoldá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
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
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
Új hozzászólás Aktív témák
-
9200 - 9101
10361 - 10301 10300 - 10201 10200 - 10101 10100 - 10001 10000 - 9901 9900 - 9801 9800 - 9701 9700 - 9601 9600 - 9501 9500 - 9401 9400 - 9301 9300 - 9201 9200 - 9101 9100 - 9001 9000 - 8901 8900 - 8801 8800 - 8701 8700 - 8601 8600 - 8501 8500 - 8401 8400 - 8301 8300 - 8201 8200 - 8101 8100 - 8001 8000 - 6001 6000 - 4001 4000 - 2001 2000 - 1
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
- Forza sorozat (Horizon/Motorsport)
- Milyen autót vegyek?
- Álláskeresés, interjú, önéletrajz
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Fejhallgató erősítő és DAC topik
- A Linux megnégyszerezte magát a Steamen — a Microsoft ismét ígérget
- BestBuy topik
- Nintendo Switch 2
- Arc Raiders
- AMD vs. INTEL vs. NVIDIA
- További aktív témák...
- 24 magos AMD Threadripper alapú munkára kiváló félgép, 128GB RAM-mal
- HP ZBook Fury 15 G7 i7-10850H 32GB 512GB SSD Quadro T2000 4GB FHD HUN bill, szép állapotban eladó
- Eladó MacBook Pro 16,1 2019 CTO
- új 0 km es garanciás lenovo loq rtx 5050 8gb
- Eladó teljesen újszerű karcmentes Samsung Galaxy Watch Ultra
- BESZÁMÍTÁS! Apple Macbook Air 13 2020 M1 8GB RAM 256GB SSD notebook garanciával hibátlan működéssel
- HP EliteBook 840 G7 i5-10210U 16GB 256GB FHD 400nit 1 év garancia
- BESZÁMÍTÁS! Asrock Z790 i9 13900K 64GB DDR5 1TB SSD RTX4080 16GB Aerocool P500B Digi ARGB ADATA 850W
- GAMER PC! Intel i7-14700 / RTX 4090 / 32GB DDR5 / 1TB NVMe / 1000w Gold! BeszámítOK
- ASTRO A50 WIRELESS HEADSET + BASE STATION 4th gen. fejhallgató
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
)




