- bitpork: MOD Júni 13 Augusztus 2- szombat jelen állás szerint.
- Argos: Szeretem az ecetfát
- sziku69: Szólánc.
- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- gban: Ingyen kellene, de tegnapra
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- Gurulunk, WAZE?!
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
-
LOGOUT
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
-
martonx
veterán
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.
-
Taci
addikt
válasz
martonx #9195 üzenetére
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
válasz
martonx #9191 üzenetére
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
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
-
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.
-
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.
-
-
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! -
lanszelot
addikt
válasz
martonx #9183 üzenetére
É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.
-
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;
} -
Köszönöm a válaszokat!
-
-
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álasz
martonx #9173 üzenetére
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).
-
_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}};
-
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!
-
nevemfel
senior tag
válasz
inf3rno #9154 üzenetére
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
válasz
inf3rno #9151 üzenetére
É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.
-
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
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
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.)
-
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!
-
don_peter
senior tag
válasz
don_peter #9141 üzenetére
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. -
-
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).
-
-
e.vit
csendes tag
Köszi szépen a tippeket, még elbénázgatok vele
-
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
-
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. ) -
Taci
addikt
É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ár
a 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
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: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.:
Azinput
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!
-
cattus
addikt
válasz
laracroft #9122 üzenetére
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
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 -
válasz
lanszelot #9119 üzenetére
iFrame YT videóváltásra szerintem ez a legegyszerűbb JS kód.
-
lanszelot
addikt
válasz
nevemfel #9118 üzenetére
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
válasz
lanszelot #9116 üzenetére
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.
-
lanszelot
addikt
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.
-
válasz
lanszelot #9114 üzenetére
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.
-
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
válasz
lanszelot #9111 üzenetére
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
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.
-
válasz
nevemfel #9105 üzenetére
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ár13
legyen, a harmadiknál16
és így tovább. Én úgy tudom, hogy vagy külső változóba mentve (DIV innerHTML) vagywindow.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
válasz
lanszelot #9104 üzenetére
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
válasz
nevemfel #9103 üzenetére
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
-
lanszelot
addikt
válasz
nevemfel #9101 üzenetére
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.
Új hozzászólás Aktív témák
Hirdetés
- iKing.Hu - Samsung S25 Ultra - Titanium Black - Használt, karcmentes
- Apple Ipad 10.generáció
- Új HP Pavilion x360 14-ek Érintős hajtogatós Laptop Tab 14" -35% i5-1335U 8/512 FHD IPS Iris Xe
- RTX 4080 SUPER,16GB. Ryzen 7 7800X3D, 32 RAM Fury RGB! Garancia!
- Asztali PC , i7 9700K , RX 5700 XT , 32GB DDR4 , 500GB NVME , 1TB HDD
- Csere-Beszámítás! Custom vizes számítógép játékra! I7 12700KF / RTX 3090 / 32GB DDR5 / 1TB SSD
- Apple iPhone 15 Pro Max 512GB, Kártyafüggetlen, 1 Év Garanciával
- 35" ASUS ROG Swift PG35VQ curved GAMER monitor
- Csere-Beszámítás! RTX Számítógép PC Játékra! I3 10100F / RTX 2060 12GB / 32GB DDR4 / 500GB SSD
- ALIENWARE Area-51 R6 Threadripper Edition 1920X
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged