-
PROHARDVER!
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
válasz
magortaltos #9735 üzenetére
Valaki egy csöpp kódot tudna írni erre ?!
Próbáld ki a ChatGPT-t. Az eredeti kérdésedet egy az egyben bemásolva már adja is a példakódot. Persze még sokszor hibázik/hibázhat, de mindig rá lehet a részletekre kérdezni, és leírást is ad, kommentel is. Én szeretem használni, ha épp gyorsan kellene egy példakód, és magamtól valamelyik rész nem megy, nem világos. -
Taci
addikt
válasz
BalanceR #9412 üzenetére
Ezt nem tudod csak kliens oldalon (JS) megvalósítani. Kell a szerver oldal is, PHP-ben meg kell írni, hogyan kezelje a kapott paramétert, mit csináljon vele.
Itt (keresésnél) a JS-nek annyi szerepe van, hogyan jeleníti meg a találatokat, mit csinál velük. De maga a keresés és a paraméterként átadott kulcsszó feldolgozása szerver oldalon történik. -
Taci
addikt
Sziasztok!
Próbálnék egy olyan megoldást csinálni, hogyha eredeti forrásból (CDN) nem sikerül behúzni a kívánt .js fájlt, akkor használja saját szerverről.
Többféle megoldással is próbálkoztam, de egyedül csak a
document.write
működik, a többi sajnos nem.JSFiddle: https://jsfiddle.net/942fgodv/
(Elsőnek egy Bootstrap JS-t töltenék a példa kedvéért, azt direkt elrontom, aztán jön a fallback, ami a példában egy custom alert JS, szintén CDN-ről.)Tehát az elején szimulálom a CDN elérhetetlenségét, elrontom a linket (1-est írok elé).
Aztán próbáltam egy olyan megoldást, hogy a <script> tagbe írtam egy onerror-lépést, de sajnos nem működik. (Fura, CSS-nél működik.)
Aztán jön a
document.write
, ami szépen működik, fel is jön az custom alert, tehát betöltött a 2. JS, és így a custom funkciót is tudta használni.
Eredetileg ezzel a megoldással készítettem el az oldalam ezen részét, viszont a Lightroom lepontozza, azt írja, ne használjam, mert lassíthatja a lassú kapcsolattal rendelkezőknél a betöltést. Ezért keresek más megoldást.Harmadik megoldási kísérletem pedig az, hogy document.head.appendChild()-dal hozzáadom a feltöltött script taget.
Ez szépen hozzá is adja, betöltés után látom, hogy jó helyen van (a custom funkció hívása előtt), viszont gondolom, a HTML feldolgozása nem várja meg, így hamarabb jut a funkcióhíváshoz, minthogy betöltené a hozzá szükséges JS-t, ezért le sem fut.Miért megy document.write-tal, és miért nem appendChild-dal? (Bár gondolom, azért nem, mert aszinkronban tölti le, míg a document.write blokkolja a további feldolgozást addig. És talán pont ezért nem javasolt a használata.)
Tudtok erre a problémára jó megoldást?
(Nem csak a CDN elérhető / nem elérhető helyzetre kell, másra is szeretném használni.)Köszönöm.
-
Taci
addikt
Sziasztok!
Tudjátok esetleg, hogy a
navigator.share
használatával hogyan lehet a szövegtörzsbe (text paraméter) kattintható linket elhelyezni?Mobilon megosztva persze szépen megy (mert az ha linket lát, alakít), viszont Windows alatt ha a Posta alkalmazással osztom meg, akkor csak az url paraméterhez helyezett link "él", máshol nem.
Ez az alap:
https://codepen.io/j471n/pen/gOxgxedDe ha egy url-t írok be a text-hez, akkor nem lesz aktív (kattintható). Pl.:
19. sor:webShareAPI("header", "www.google.com", "www.url.com")
Csak ami az url paraméterhez kerül.Próbáltam HTML kóddal is, hátha az kell az Outlook-nak, Gmail-nek, Postának, de nem segített:
shareHTMLBody = "<html><body>";
shareHTMLBody = shareHTMLBody + '<a href="www.google.com">Google</a>';
shareHTMLBody = shareHTMLBody + "</body></html>";
Lehetséges egyáltalán?
Köszönöm. -
Taci
addikt
válasz
martonx #9230 üzenetére
Igen, ezért csináltam úgy (kényszer-öszvérmegoldásként), hogy a HTML tartalommal feltöltve és frissen tartva van szerver oldalon, így a Google is látja és indexeli - aztán a kliensen betölt, és a JS lecseréli a legfrissebbre.
Na de ez se nem szép, se nem hatékony. Rossz irány volt.
Úgyhogy ezt el is engedem, és hagyom a dinamikus tartalomgenerálást. Lesznek szerver oldalon pár percenként PHP-val frissített, statikus, tartalommal szépen feltöltött oldalak, a Google-nek lesz mit indexelnie. Nem lesz olyan szép és kreatív mint most (amit amúgy nagyon szeretek), ellenben nem csak a családom és én fogom ismerni és látni...Remélhetőleg.
Így igazából használom azt a szerver oldalon generálós módszert, amit a mostani megoldáshoz csináltam (PHP):
1) HTML template jól elkülöníthető kulcsszó-sztringekkel (pl. ahova az első cikkhez tartozó kép linkje megy, az websiteData_imageSource_1, ahova az adott title, az mondjuk websiteData_Title_1 stb.)
2) PHP, lekéri a friss adatokat SQL-ből, aztán az eredményeket egy egyszerű sztringcserével a kulcsszó-sztringek helyére pakolja, majd elmenti (a megfelelő mappába index.html-ként).Oké, nagyon alap-alap-alap megoldás, de működik. Vagy tanuljak valami normális keretrendszert inkább? Semmit nem ismerek, sose használtam, csak pár nevet láttam még: React, Vue.js, Next.js, ilyesmik.
Szívesen tanulok, ha azt mondjátok, hasznos lehet, és hogy a mostani faék-egyszerűségű módszerem nem jó. Ehhez szívesen vennék egy ajánlást, mit tanuljak meg. (Bár azt se tudom, a jelenlegi cPaneles szolgáltatónál telepíthetek-e egyáltalán bármit, ami ezekhez lenne szükséges.)A cél: híraggregátor oldal. A jelenlegi formájában olyan, mint a Fb, görgetsz, töltődik. Szeretem, tetszik, de sajnos rossz ötlet volt. Nem Google-barát, ebből nem lesz haszon őszire.
Inkább váltok valami 1.000.001. standard híroldal-kinézetre. Ehhez mondjuk szerintem nem kell semmi extra, elég a PHP --> SQL --> PHP --> HTML irány, de hátha ti mást mondotok.
Köszönöm.
-
Taci
addikt
Most pontosan így működik, és a Google semmit sem lát a JS által kliens oldalon generált tartalomból.
(A search console-ban látom, hogy néha betölti a szükséges JS-t, olyankor van indexelt tartalom is, de aztán "vált", és mondjuk másnaptól már kihagyja a fájlt, így csak egy üres statikus váz van.)
Vannak saját cikkeik is, hogy az indexelő botok már látják a JS által generált tartalmat is, hogy a dinamikusan épülő weblapokat is indexelni tudják - sajnos azonban ez nem tökéletes / vagy nálam van valami baja (amit amúgy látok is - úgy gondolja, hogy az az 1 szál JS fájl neki nem kell és kész, és így bukta az egész oldalépítés).
Ezért akartam szerver oldali összerakásra váltani, viszont mivel az oldal ettől még görgetés után dinamikusan épül fel (infinite scroll), eléggé zsákutcába kerültem. Már a projekt kukázásán és újrakezdésén gondolkodom. -
Taci
addikt
Sajnos nem jó a B terv, nagyon sok a probléma vele. Így mennék még egy kört:
Adott egy tartalommal feltöltött div:
<div id="content">Tartalom</div>
Meg lehet szakítani / kihagyni az adott div renderelését?
<div id="content">
<script>if (jsBetoltve == 0){ //content div betöltésének átugrása }</script>
Tartalom</div>
És az elrejtés (display:none, z-index stb.) sajnos nem ajánlott a SEO szempontjából, sok cikket átolvastam a témában.
Ott kell hogy legyen a tartalom a szerveren, az sem nagy baj, hogy azt a plusz pár kB-ot le kell tölteni, viszont eléggé zavaró, ahogy látszódik egy pillanatra, mielőtt a JS lenullázná a div-et. (Hiszen rendereli, ha már benne van.)
Köszönöm.
-
Taci
addikt
válasz
sztanozs #9225 üzenetére
Igen, teljesen igazad van. Azóta már rájöttem, hogy ugyanaz lenne a probléma, és hogy pont ugyanúgy kliens oldalon generálódna a tartalom, ahogy most - szóval csak mentem volna egy nagy kört a semmiért.
Úgyhogy marad a B terv, a generált tartalomhoz való hozzáfűzés. Így ez teljesen szerver oldali generálás lesz, JS csak akkor fog futni, ha a felhasználó a görgetésben az utolsó elemek közelébe ér (infinite scroll). Így a JS állomány nagy részét (amik eddig a tartalomgenerálásért voltak felelősek) elég ha a csak FCP (First Contentful Paint) után húzom be (async? Ennek még utána kell néznem amúgy is: [link]), de ez még arrébb van kicsit.Köszönöm.
-
Taci
addikt
Köszönöm (sztanozs, neked is), a példakódot is (jó a fejcsere
) .
Viszont a tartalom elrejtését már az elején kizártam, mert a Google nem mindig egyértelműen áll hozzá (rendben van, látja, indexeli - vagy épp SEO-manipulálásnak tartja, és ejnyebejnye). És az egész átalakításom lényege pont az, hogy a G felé rendben legyen az oldal.Talán megpróbálom úgy, hogy üres lesz a div, és ha a (tartalomgeneráláshoz) szükséges JS-ek közül nem töltődött be bármelyik is, akkor behúzza oda az előre generált tartalmi részt. Máskülönben pedig üresen hagyja, és engedi, hogy a JS végezze a dolgát.
Nagy vonalakban:
https://jsfiddle.net/1dgyfs2v/
(disy68, a példakódodban van pár rész, amit így is fel tudok használni, köszönöm.)Bár jobban szeretném, ha nem csak utólag, szkripttel rakna bele tartalmat - hisz' az egész kálváriám abból indult eleve. Na de ezt már kisakkozom valahogy, most már elég lehetőségem van. Köszönöm a segítséget.
-
Taci
addikt
Sziasztok!
Szeretném azt elérni, hogy ha egy adott szkript (külső JS fájl) nem tölt be, akkor az adott div tartalma kiürítésre kerüljön még feldolgozás előtt, sőt, ha lehet, be se töltődjön:
https://jsfiddle.net/byvfcex0/Most egyelőre kb. csak így tudtam megoldani, ahogy a példában van, viszont a Network tabon látszódik, hogy ettől a div tartalmát még feldolgozza nyilván, a képet is betölti, és csak utána üríti - és ez így nem a legjobb.
A háttér:
Kliens oldalon JS által generálódik a div tartalma, viszont a Google nem (mindig) tölti be a hozzá szükséges JS-t, így indexeléskor nem lát tartalmat.
Ezért most már szerver oldalon generálom le a tartalmi részt - viszont ez nem a legfrissebb, nem ugyanaz, mintha amikor a felhasználó betölti az oldalt, és a pár mp-es frissen (kliens oldalon) generált adatok ott vannak.Ezért betöltéskor szeretném azt elérni, hogy:
- ha a szükséges JS nem lett betöltve (Google indexel), akkor ott van a szerver oldalon generált tartalom, 1 óránként frissítve,
- viszont ha betöltött a JS (normál felhasználó), akkor a div tartalma eleve fel se legyen dolgozva, mert a JS úgyis kiüríti és friss tartalommal tölti fel. (Az a plusz pár kB-nyi HTML-rész pedig nem akkora vérveszteség.)Most is működik, viszont az első pár képet feleslegesen tölti be, mert azonnal kukázva lesz (a többi lazyload-os, szóval nem számít), illetve egy pillanatra látszódik is a tartalom, amit aztán a JS leszed, és ez nem tetszik.
Meg lehet oldani, hogy a szkript betöltésének sikerességétől függően dolgozza fel a div tartalmát / vagy skippelje?
Van B tervem is (és C is), dobom a div törlését, és a szerver oldalon generált tartalomra építek, csak sűrűbbre veszem a generálását, 5 percre, és ahhoz fűzöm hozzá a többi tartalmat. Csak ez sok módosítás, így ha megoldható az első változat, azt csinálnám.
Köszönöm.
-
Taci
addikt
válasz
martonx #9212 üzenetére
https://jsfiddle.net/n5ap87gh/
A jobbra gombot majd úgy nyomd, ha előtte belekattintottál a jobb alsó területbe, ahova a gombot is generálja.
Jaj bocs, eggyel lejjebb akart menni a válasz.
-
Taci
addikt
válasz
martonx #9206 üzenetére
Azt hogyan lehetne szépen kezelni, ha a többi elem csak később generálódik?
Esetemben görgetés után, de a példában úgy csináltam, hogy 1mp után tölti be a 3. és 4. elemet:
https://jsfiddle.net/vsecyd1t/Ha így oldom meg:
https://jsfiddle.net/vsecyd1t/2/
akkor az összes elemre újra megcsinálja. 4 elemnél még oké, de ha esetemben már a 200. elemnél jár a görgetésben, akkor az már pazarlás.Plusz a 3. és 4. elem betöltése után ha az 1. vagy a 2. elemre kattintok, duplán hívja meg a funkciót. (A másik alertet direkt kiszedtem, hogy egyértelmű legyen, hogy mikor hív duplán.)
Hogyan lehetne ezt jól megoldani?
Köszönöm. -
Taci
addikt
válasz
martonx #9202 üzenetére
Ahogy most van:
https://jsfiddle.net/swndoygm/Ahogy szeretném, de nem áll össze:
https://jsfiddle.net/swndoygm/1/Köszönöm.
-
Taci
addikt
Sziasztok!
Adott az alábbi típusú HTML elem:
<a id="category1"
href="https://pelda.hu/category1"
onclick="funkcio('categories', 'category1'); return false;">
Category1
</a>
Ezeket szeretném megcsinálni úgy, hogy ne legyen a HTML kódban az onclick esemény:
<a id="category1"
href="https://pelda.hu/category1">
Category1
</a>
Ezt a kódot készítettem hozzá:
for (var i = 0; i < categoriesArray.length; i++){
var element = document.getElementById(categoriesArray[i]);
element.addEventListener("click", function(e){
funkcio(0, categoriesArray[i]);
//alert('element: ' + element);
e.preventDefault();
});
}
Azt szeretném, hogy menjen végig a tömb összes elemén (amik az elemek ID-jai), majd mindegyikhez állítsa be, hogy kattintás esetén fusson le a funkcio() függvény (csak a példa kedvéért a név) paraméterként a tömbelemet megkapva. A preventDefault azért kell, hogy ilyenkor ne kövesse a href linkjét.
Az alertet azért raktam bele, hogy lássam, mit csinál - és azt látom, hogy az összes elemnél a tömb utolsó elemét mutatja.
Elég sok találat van rá neten (például ez), de eddig egyikkel sem sikerült megoldanom.
Tudnátok segíteni benne? Köszönöm. -
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. -
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.
-
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.
-
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.)
-
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!
-
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.? -
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!
-
Taci
addikt
Köszönöm a választ mindkettőtöknek.
-
Taci
addikt
válasz
martonx #9094 üzenetére
Na ez teljesen jogos.
Akkor módosítok én is.
@nevemfel: De itt nem csak arról szól a dolog, hogy ha a "?v=1.0.0" lett cache-elve, akkor ha az a verzió át van írva bármi másra (tehát nem egyezik), akkor tölti le újra? Mármint a fájlokba ez nem néz bele, hogy abban milyen verzió van benne, hanem ez itt a html fájlban a változtatás csak kvázi egy flag, hogy halló, kliens, töltsd el újra.
Vagy rosszul használom? -
Taci
addikt
válasz
nevemfel #9090 üzenetére
Javítsatok ki, ha tévedek,
de ezzel a megoldással ezeket a fájlokat újra és újra letölti a kliens. Tehát hiába nem változtattál semmit rajtuk 1 éve, a kliensek minden alkalommal újra és újra letöltik.
Persze ez a korlátlan adatforgalom világában már nem akkora probléma, de jó figyelni erre is.Itt a fórumon valamelyik topikban ajánlottá(to)k ezt a megoldást:
<link rel="stylesheet" href="/fajlmappa/style.css?v=1.0.0">
<script src="/fajlmappa/javascript.js?v=1.0.0"></script>
stb.Ez a html kódban van, és amíg nem változtatsz a verziószámokon, nem tölti le újra, cache-ből használja, ha tudja. Ha változtatsz a fájlok tartalmán, akkor pedig itt is verziót emelsz, így a kliens az új verziót tölti le és használja.
Hátha ez (is) hasznos lehet.
-
Taci
addikt
Valami ilyesmivel kellene kezdeni:
var elementTest = document.getElementById("test");
elementTest.addEventListener("keyup", function(event) {
if (event.keyCode === 188) {
//vessző lett nyomva
}
}
Innen szedtem ki, hogy a vessző keycode-ja a 188.
A keyup akkor "ugrik", ha felengeded a billentyűt. Ha neked már az is kell, amikor lenyomja, akkor az a keydown lesz.
-
Taci
addikt
Szia!
Direktben a JS szerintem nem fog tudni hozzáférni a szerveren lévő tartalomhoz. Ehhez kell a PHP és a JS közötti kapcsolódás (második része a kérdésednek).
Én erre az Axios-t használom: [link]
(Használhatsz Ajaxot is, de sokmindenre kell figyelni később, ha "élesben" akarnád használni, úgyhogy jobban jársz, ha már eleve az Axios-szal kezdesz. Ajax: [link] )Írnod kell egy .php szkriptet, ami listázza a mappa tartalmát, és ezt az adatot visszaadja Axios-on keresztül a JS-nek.
(Ha a -megfelelő- gép mellett leszek, segítek majd az Axios-ban, ha kell, addig nézd átt a linkelt oldalt, beszédesek a példák benne.)
-
Taci
addikt
válasz
sztanozs #9012 üzenetére
Nem lehet, hogy az a szöveg még a W3-as oldalról került oda?
Mert nekem sem megy a jsfiddle-ről. Először nekem is ott volt a szöveg, aztán arra gondoltam, lehet, csak a W3-as vágólapos másolásról, szóval másoltam valami más szöveget rá, aztán vissza a jsfiddle-be, és az előzőleg másolt tartalmat illeszti be vágólapról.
@Mr. Y: Nekem pont van ilyen fícsör a weblapon, működik is szépen, bemásolom majd, amint gépközelben leszek.
-
Taci
addikt
Hmm. Én a tabokat kiszedem, így arra a trim()-et használom, és nem direktben azt keresem. Az input mezőt pedig csak egy sorosra állítottam (kereséshez), így nincs új sor (bemásolva sem).
De az előzőben leírtakat találok máshol is: [link]
enteredText = textareaVariableName.val();
numberOfLineBreaks = (enteredText.match(/\n/g)||[]).length;
characterCount = enteredText.length + numberOfLineBreaks;
De ezt tényleg ki kell próbálni. Remélhetőleg ezek közül valamelyikkel működni fog.
-
Taci
addikt
Az első részhez próbáld ki a charAt() függvényt. [link]
A másodiknál a forrástól is függ, mit kellene használnod, mert nem mindegy, hogyan szerepel benne az új sor.
Esetleg RegExp?
Tab: [link]
New line: [link]De új sor lehet még a \n, \r, vagy a \n\r is, nem is beszélve a <br>-ről.
Vagy ezek olyan dolgok, amiket te is kipróbáltál már? Csak mert az első pár Google-találat.
-
Taci
addikt
Erre sajnos nem látok rá, ehhez használnom kellene a programot.
De az első linkben lévő megoldás ugye ez:
if (event.target.value!="Off") {
this.getField("address_secondary").value = this.getField("address_main").valueAsString;
}
Gondolom, a változóneveket átírtad a megfelelőekre.
Illetve az sem mindegy, hogy .value-t vagy .valueAsString-et használsz.
With valueAsString you know what you're getting back, ie a string. With value you don't know. It can be a string, or a number or even a boolean or an array. JavaScript is very flexible and does automatic type casting for you, but it's better to know what you're working with.Bár igazából egy mező tartalmát másolod, ott ez a példa is jó kellene hogy legyen.
Nézd meg, hogy jó mezőneveket adtál-e meg (az "address_secondary" (ide másol) és az "address_main" (innen) helyett. Hova <-- Honnan.).
-
Taci
addikt
Nekem az oldal tartalmát 99%-ban JS generálja (JS --> PHP --> SQL --> PHP --> JS --> HTML), és ha háttérben is nyitom (pl. linkjére középső egérgomb), akkor is betölt mindent.
Ezt a részt már elég rég csináltam, nem emlékeztem elsőre, hogy hogyan tölt be, de most megnéztem, az index.html-ben van egy
<script>elsoBetoltes();</script>
rész (más néven persze), az indít el minden mást. Animációt is hoz magával (betöltő), felteszem, az is gond nélkül lefut, legalábbis se logban se konzolban nem látok hibát.Viszont a külső plugineket (pl. CookieBot banner-e) tényleg csak akkor, ha aktív lesz a böngésző tabja.
Nem tudom, csak egy tipp, de nem lehet, hogy "rossz helyen" (időben) van hívva az animáció, az oldal betöltése után?
Logold, hol tölt be az oldal, és azt is, hol indul el az animáció, és nézd meg, nincs-e ez utóbbi a teljes betöltés után indítva.window.onload = function() {
console.log('The page has fully loaded');
}
Jobb ötletem nincs erre sajnos most, nálam ilyen még nem fordult elő (ezek szerint talán csak szerencsém volt).
-
Taci
addikt
Örülök, hogy működik, nagyon szívesen.
@Mr. Y: Betölteni betölt, viszont ahogy sztanozs is írja, egy bizonyos időn túl nem engedi futni a szkripteket. (Amúgy ha JS-tel szeretnél számoltatni, úgy érdemes, hogy a rendszeridőhöz mérten számolsz, mert ha a háttérben le is áll a szkript, amikor aktív lesz, és folytatódik, "jó helyen lesz", hiszen a rendszeridőhöz képest számol, ami mindig adott.)
-
Taci
addikt
Google-ben van egy ilyen találat a saját topikjában: [link]
var emptyFields = [];
for (var i=0; i<this.numFields; i++) {
var f= this.getField(this.getNthFieldName(i));
if (f.type!="button" && f.required ) {
if ((f.type=="text" && f.value=="") ||
(f.type=="checkbox" && f.value=="Off"))
emptyFields.push(f.name);
}
}
if (emptyFields.length>0) {
app.alert("Error! You must fill in the following fields:\n" +
emptyFields.join("\n"));
}
For anyone else who is trying to implement this heres how:
Create a button
Right click the button and go to properties -> Actions tab
Trigger:Mouse Up
Action: Run JavaScript
-> Add...
Copy and paste Giliad D's code
->ok -> close
Select the fields you want required by right clicking the fields and selecting the "Set as Required Field" option
Save and done!De találtam egy videókat is: [link] [link]
Ilyesmi keresésekkel (Google-ön és YouTube-on is) még sok más találatot is kapsz:
adobe reader dc pdf check if field is empty javascript
adobe reader dc pdf form validationRemélem, így már meglesz.
-
Taci
addikt
Hú, hát ez meg mi? o.O
Akkor ez a gombletiltós dolog nem jó ide, ha műveletet csak a gomb lenyomásához tudsz társítani (mert inaktivált gombot nehéz lenyomni
).
Itt talán így lehet akkor megoldani:
A mezőknek és a gombnak is külön változónevek kellenek, pl.:
mezoNev, mezoEmail, mezoTelefonszam, kuldesGomb
Illetve betöltéskor egyből tiltani a küldés gombot:
document.getElementById("kuldesGomb").disabled = true;
A mezőkbe történő begépeléskor futtatni kell egy szkriptet, ami azt nézi, hogy ha az összes (többi) mezőben már van érték, akkor aktívvá teszi a küldés gombot
(...("kuldesGomb").disabled = false;
).
Így addig, amíg nincs minden mező kitöltve (nincs benne legalább 1 karakter), inaktív marad a gomb.Biztos van olyan vezérlő esemény is, amit ki tudsz választani, ami akkor futtat kódot, ha egy mezőbe gépelni kezdesz. Oda valami ilyesmi szkript kell:
Ha a mezoNev-nél állítod be, akkor a többit kell figyelni, hisz' ennél a szkript eleve csak akkor aktiválódik, ha beleírsz valamit, kvázi a szkript futtatásakor nem lesz üres. És ugyanezen elven a többinél is.
//mezoNev
if ((document.getElementById("mezoEmail").value.length > 0) &&
(document.getElementById("mezoTelefonszam").value.length > 0)){
//gomb deaktiválásának megszüntetése
document.getElementById("kuldesGomb").disabled = false;
}
Így ha írsz a mezoNev-be, és van tartalom a mezoTelefonszamban, de nincs a mezoEmail-ben, akkor a gomb inaktív marad.
Aztán amint írsz a mezoEmail-be is, már a másik kettőben is lesz adat, tehát aktiválja a gombot.De amúgy ez a screenshotolt tool eléggé megbonyolítja (számomra), sokkal egyszerűbb és gyorsabb lenne simán csak kódban. Sokkal több lehetőséggel. Pl.: [link] Itt ha úgy kattintasz a Küldés gombra, hogy nem írtál be semmilyen adatot, akkor szól, hogy kötelezően kitöltendő mező (ami neked itt is jól jönne).
Bár ezt most is beleépítheted (ha van hova):document.getElementById("mezoNev").required;
document.getElementById("mezoEmail").required;
document.getElementById("mezoTelefonszam").required;
De hátha be tudod állítani amiket írtam, lesz mindre lehetőség, és akkor jó lehet.
-
Taci
addikt
Egy egyszerű példával:
var a = 1;
var b = 2;
var c;
function osszead(szam1, szam2){
var osszeg = szam1 + szam2;
return osszeg;
}
c = osszead(a, b);
Ekkor c érték az osszead függvény által visszaadott (return) érték lesz, azaz 3.
Egy függvény vagy ad vissza értéket, vagy nem. Ha ad, akkor azt a return-nel teszi.
-
Taci
addikt
Egy sima if-else ág?
Ahova azonnalit akarsz, oda nem kell a
event.preventDefault();
és nem kell az animate sem:
$('html, body').animate({
scrollTop: $(hash).offset().top
}, 800, function(){
// Add hash (#) to URL when done scrolling (default click behavior)
window.location.hash = hash;
})
Próbáld ki abban a példában a linken, kommenteld ki ezeket a részeket, és máris egyből ugrik. Tehát meg lehet csinálni (akár saját függvényben paraméterezve is), hogy ahol akarod, ott finoman gördüljön (legyen benne a fenti 2 rész), ahol pedig nem, azonnal ugorjon (ott a fenti 2 rész ne legyen benne).
-
Taci
addikt
Infinite scroll a neve, de van más megoldás is, a Pagination.
Előbbit úgy képzeld el, mint a Fb-ot, görgetsz, görgetsz, de végig a facebook.com-on maradsz. Ahogy sztanozs elmagyarázta.
Utóbbinál pedig görgetsz, eléred az aktuális "oldal" alját, ott kattintasz egy gombra ("További tartalom" stb.) akkor betölti a következőt, és a címsorban már azt látod a kezdeti sample.com helyett, hogy sample.com/2, aztán /3, /4 és így tovább. -
Taci
addikt
XSS elleni védelemben kérnék segítséget/tanácsot.
Egyelőre csak 1 user inputos rész van az oldalon, a keresőmező. Ezt jelenleg így kezelem:
- Kliens oldalon:
strSearch = strSearch.replace(/&|!|\?|%|\*|\+|-|=|<|>|\(|\)|\[|\]|{|}|"|'|\||\/|\\|\^/g,"");
Tehát kiszedek belőle minden speciális karaktert. (Aztán még pár feldolgozó művelet, mielőtt szerver oldalra át lenne küldve.)- Szerver oldalon:
$strSearch=htmlspecialchars($_GET["searchString"], ENT_QUOTES, 'UTF-8');
Aztán SQL-nek paraméterként vannak átadva a keresőszavak.Tehetek még ennél többet? Kell egyáltalán? Én úgy látom, ezekkel a lépésekkel a keresőmezőre vonatkozólag le van védve XSS (és SQL Injection) ellen is.
Viszont ha rosszul látom, kérlek, javítsatok ki.
----------
Illetve később majd lesz:
- felhasználókezelés (tehát mezők felhasználónévnek, jelszónak, email címnek stb.)
- kommentelésOda ez a megoldás viszont már egészen biztosan kevés lesz.
Nem akarok előre szaladni, előbb az legyen kész, amivel indulni akarok, de mivel egy téma (XSS, Cross Site Scripting), így azért ez is szem elé került.És hogy ezek a funkcióim is le legyenek majd védve, úgy láttam, kelleni fog egy "user input sanitizer". Utána olvasva nem egy egyszerű téma - vagy csak rossz/régi/bonyolult találatokat néztem.
Furcsáltam, hogy nincs rá beépített megoldás, amikor is ezt találtam:
Sanitizer.sanitize()
Viszont ez még valami nagyon új feature lesz, egyelőre csak teszt változatban.Talán majd az encodeURI() / decodeURI() (Component) lehet majd hasznos.
Na de majd ha odaértem.Az első részre ha tudnátok tanácsot/véleményt adni, azt megköszönném.
-
Taci
addikt
válasz
martonx #8831 üzenetére
Nem akartam kókányolósra, csak az alap lekérdezésen túli második lekérdezés, ami visszaadja ezt az adatot, amivel aztán haladnom kell tovább, annyira belassította az első betöltődést, hogy ki kellett vennem belőle, mert tökre elrontotta az élményt (sokáig nem volt tartalom). És a második lekérdezés adatára csak sok-sok scrollozás után volt szükség, így gondoltam, ráér később is. És onnan tolta magával a többi dolgot.
(Lehet, csak túlgondolom amúgy, és olyan esetet próbálok megoldani, amit amúgy nem is kellene...)
De már annyira nyakatekert az egész, hogy visszamegyek az alaphoz, és hagyom ezt az időeltolósdit, mert annyi esetet kell lekezelni, hogy ennyit nem ér az egész.
Nekikezdtem amúgy a setInterval-os clear-es megoldásnak is, de aztán valamiért a timeout-ossal folytattam.
De inkább vissza az elejére, mert ez így már nem szép (és közel sem hatékony).
Köszi. -
Taci
addikt
Köszönöm a tippet.
A UI már eleve így készült, felkészítve arra, hogy mi történjen, amíg eredményre vár az adatbázisból.
Ez most csak egy extrém ritka lehetőség, amit kezelni akartam, de úgy vagyok vele, legyen minden rendesen lekezelve, még akkor is, ha csak nagyon kis eséllyel fordulhat elő.
Szóval végül úgy oldottam meg, hogy az egész JS-kódrészt, ami a várt változóval dolgozna, beletettem egy setTimeout-ba, aminek a végén a várakozási időt egy változó állítja be. Ezt a változót a setTimeout előtt egy if-else állítja be: ha undefined a változó típusa, akkor még nem érkezett meg a válasz, ilyenkor váratom 500 ms-t (még tesztelem, hogy ez elég-e, vagy nem-e túl sok stb.). Ha viszont már megvan az érték, akkor 0-ra állítja, és azonnal lefut.
-
Taci
addikt
Szükségem lenne egy függvényre, ami egészen addig nem engedi tovább futni a szkript többi részét, amíg a szükséges változó értéket nem kap (mert utána azzal az értékkel dolgoznék tovább).
(Nem lehet összedrótozni/egybeágyazni őket sehogy, hogy csak akkor fusson a szkript maradék része, ha az érték visszajött az adatbázisból. Sajnos ez nem megoldható.)Ilyesmit kezdtem el összerakni, de nem úgy működik, ahogy szeretném:
function waitForResult(resultToWaitFor, acceptValue){
console.log("In waitForResult. resultToWaitFor = " + resultToWaitFor);
if (typeof resultToWaitFor !== 'undefined'){
setTimeout(function(){
waitForResult();
console.log("Waiting for result.")
if (resultToWaitFor >= acceptValue){
return 0;
}
}, 100);
} else {
console.log("Megvan az eredmény.");
return 0;
}
}
***** Az elképzelés lényege az lenne, hogy 100ms-onként ellenőrzi, hogy kapott-e már értéket a vizsgált változó. Ha nem, ellenőrzi újra (rekurzívan). Ha kapott, kilép, és engedi futni az utána következő részeket. Nem ad vissza értéket. Semmit nem csinál, csak "feltartja" a szkriptet addig, amíg a változó értéket nem kap. (És mindig kap. Jellemzően pár tized mp-en belül, viszont van, hogyha "túlbuzgó" a user, eljuthat ahhoz a részhez a kódhoz, ahol használni kell ezt az értéket, mielőtt még materializálódna a változó. Ezt szeretném orvosolni.)
Ha a jelen formájában használom, hiába érkezik meg az érték, folyamatosan pörög tovább (logban látszódik, hogy Waiting for result-ot dobálja eszement módon utána is).
Pont ennek utánajárva találtam, hogy az első if-ágban is kell egy return - a belső ellenőrzést (és vele az acceptValue-t) ezért hoztam be. De nem segített.
A return 0 azért lett, mert a sima return-nal nem (sem működött), próbáltam hát így is.
----------
Vagy csináljak egy setTimeout-os, while-os ellenőrzést, a végén emelgetve egy számlálót, és megadok egy értéket neki, amit soha nem érhet el? Max ez a backup plan, de jó lenne a későbbiekben is egy ilyen "waitForResult" függvény, jó lenne azt rendbe rakni.Irányt tudnátok mutatni a témában, kérlek?
-
Taci
addikt
Az elsőben a bal oldali mezők szépen fókuszba kerülnek gépen és Androidon is Chrome alatt nálam.
De se a jobb oldali mezők (Outputs), se a második link mezői nem, se gépen, se telefonon.Viszont különböző típusúak is. Amik fókuszba kerülnek, azok mat-form-field típusúak, és fókuszba álláskor kapnak egy mat-focused osztályt.
A nem működőek pedig input mezők.
Nem tudom, hogy ezzel most segítettem-e egyáltalán bármit is.
-
Taci
addikt
válasz
lanszelot #8818 üzenetére
Az a kikötés, hogy kisebb legyen 2-nél, csak az if-en belül él. Attól még amikor az arrNr = 1, belép az if-be, és végrehajtja a növelést, így utána az arrNr értéke 2 lesz. Szóval ha utána használod az értékét (nem if-en belül, mert oda már valóban nem lép be), akkor 2-vel fog dolgozni. (Abból a kódrészletből tudok "dolgozni", amit ide írtál. Ha if-en belül használod az arrNr értékét, akkor valóban nem kellene már 2-t kapnia.)
-
Taci
addikt
Más adatokat is tartalmaz a lekerdezesEredmenye, ezért egy az egyben nem tudom/akarom átadni.
Az lenne az ultimate cél, hogy az új lekérdezések (amik új értékekkel töltik fel a lekerdezesEredmenye változót) adatai a userData végére kerüljenek pluszban.
Tehát ha az első lekérdezésből feltöltött 10 elemet (0-9), akkor a következő lekérdezés ehhez fűzze hozzá, a 11. elemtől indulva.Pluszban szeretném, hogy ebből az új tömbből ami adattal (userrel) már dolgoztam, azt kiszedjen belőle (hogy ne pazaroljam a felhasznált helyet feleslegesen), de úgy, hogy az előző hozzáfűzős módszer miatt az "id-k" ne változzanak.
Tehát ha 10 elemem volt az első lekérdezésből, és a második lekérdezésig feldolgoztam 5-öt belőle, akkor magában a tömbben csak a hátra lévő 5 elem legyen (hogy ne foglalja a memóriát, mert kb. végtelenig nyúlhat a bővítés), viszont amint jönnek az adatok az új lekérdezésből, azok a 11. elemként kezdve kerüljenek be. (hogy az "id-jukra" megfelelő módon tudjak hivatkozni)Néztem a slice()-t de az csak új tömbbe rakja, 0-tól kezdőden, így az nem jó.
Esetleg még arra gondoltam, hogy simán csak "lenullázom" az értékét a már felhasznált tömb elemeknek. Pl. userData[0] = ""; (vagy hasonló, ahogy működik majd) -
Taci
addikt
Bénázok...
Szeretnék egy tömböt, amibe feltöltöm (mondjuk) a userek vezetéknevét, keresztnevét, korát.
Így gondoltam megcsinálni:
var userData = new Array();
for (var i = 0; i < numberOfUsers; i++){
userData[i] = new Array();
userData[i]["vezetknev"] = lekerdezesEredmenye[i].vezeteknev;
userData[i]["keresztnev"] = lekerdezesEredmenye[i].keresztnev;
userData[i]["kor"] = lekerdezesEredmenye[i].kor;
//stb.
}
Lekérdezni meg úgy szeretném, hogy userData[0]["kor"], akkor visszaadja, hogy pl. 28.
Működik, de azt kérdezném, hogy van-e ennek jobb módja.
Mert valamiért olyan "furán néz ki"... (aztán persze ez legyen a legnagyobb gond.)Köszi.
-
Taci
addikt
Sziasztok!
Van bármi hátránya annak, ha a honlapomra a JS-szkripteket "tömörítve" (minify, pl. https://jscompress.com/) rakom fel és használom?
-
Taci
addikt
válasz
martonx #8737 üzenetére
Nem tudom, hogyan működik, csak ma eszembe jutott, hogy ez még nincs lekezelve, pedig tervezek módosításokat.
Akkor ezek szerint ha frissítek valamit az oldal kódjában (html, css, js), akkor azt következő töltéskor a kliensek már töltik és használják is, nem kell semmilyen "trükközés"? -
Taci
addikt
Köszönöm, átnézem mindenképp. Belekezdtem már akkor, csak sok dolog közbejött.
Lenne egy másik kérdésem is:
Tegyük fel, hogy van egy oldalam, aminek van 2 menüpontja. Telik-múlik az idő, a felhasználók használják az oldalt. Aztán úgy látom jónak, hogy azt a 2 menüpontot 5-re bővítem.
Hogyan lehet azt megoldani, hogy a frissített oldalszerkezet eljusson a felhasználókhoz?
Mert sima újratöltésnél ugye csak cache-ből dolgozik, így gondolom, ha "nem muszáj", nem fogja megnézni, van-e újabb source verzió. Így amíg nem tölti le a frissített fájlokat az új menüpontokkal, addig én hiába csináltam meg az 5 menüpontot, a felhasználó csak 2-t fog látni.Hogyan szoktátok, hogyan lehet ezt kezelni? Mi a bevált módszer erre? Van esetleg egy változó, hogy bizonyos időközönként ellenőrizze, van-e újabb source verzió? De ez így nem lenne teljesen jó, mert ha megcsinálom egyik nap, szeretném, ha másnap már használnák az új fájlokat. Szóval olyan opció kellene (ha van, ha lehetséges), hogy ha módosítok, akkor a következő töltésnél már az új változatot szedje le a kliens.
Köszönöm.
-
Taci
addikt
Ti írtatok már saját kezűleg sütikezelőt? (GDPR-sáv)
Nagyjából készen vagyok az oldallal, a megfelelő engedélyekre várok még, és funkcionalitását tekintve még a sütikezelés hiányzik. (Bár sütiket nem használok (egyelőre), csak local storage-ot, de úgy láttam, hogy jogszabály szerint ez egy kalap alá van véve, tehát mindegy, hogy cookie vagy local storage, kell a hozzájárulás és a GDPR-sáv.)
Nem tudom, megéri-e energiát belefektetni, és megírni magamnak (bár nem igazán tudom/értem, mi-hova-miért tartozik), vagy jobban járnék, ha vennék egy jól felépítettet, és csak beépíteném.
Ez utóbbira van ötletetek?
Feleljen meg az előírásoknak, legyen minden állítható, amit állítani kellhet (user szempontjából).A működését illetően pedig, ha magamnak akarnám csinálni:
Amire használom jelenleg a local storage-ot:
- sötét mód állapota
- lokáció (weather widget-hez)
- 18 éves elmúlt-e (tartalmak szűrése, megjelenítése)
- hasonlók.Ez szerverre egyáltalán nem kerül, nem mentek semmit a userekről (jelenleg - majd talán később, egyszer), még igazából látogatottságot se nézek (még), és nincs összekötve se Google-lel, se Fb-kal. Ehhez a két utóbbihoz már tuti kelleni fog egy megfelelő megoldás - de azon kívül?
Ugye ezeket amiket írtam, nevezhetem a működéshez szükséges "cookie-knak", így ezt amúgy sem lehetne lekapcsolni. Vagy ezt sem én döntöm el? Lehet a sötét mód állapota kényelmi beállítás, és akkor már máshogy és máshol kell kezelni?Ebben tudnátok segítséget adni? Ha csak egy jól összeszedett cikk is az, az is bőven jó lenne, csak tudjam, merre-hogyan induljak.
Köszi.
-
Taci
addikt
válasz
polymorphin #8657 üzenetére
Tapasztalatból tudom, hogy sokak nem is foglalkoznak vele, milyen böngészőt használnak, menjen minden mindenen (ha már egyszer drágán megvették a gépet), így még ha tehetnék, most is IE-ben nyitnának meg mindent. Ezért akarom ezt az ellenőrzést bele, szétesve inkább ne jelenítse meg az oldalt sehogy, helyette egy információs lap, hogy használd ezt vagy azt a böngészőt.
Plusz valamelyik adblockeres Chrome addon-nál láttam olyan opciót egyből kéz alatt, hogy a Javascriptek futását letiltja teljesen. Na erre is fel akarom készíteni.
De leghamarabb maximum csak hétvégén lesz időm ezzel foglalkozni (vagy inkább csak bőven később), ezért is szántam még csak puhatolózó kérdésnek.
Köszönöm a válaszokat.
-
Taci
addikt
Egyelőre ez még csak egy tapogatózó, felületes kérdezősködés, de azt szeretném elérni, hogy az oldalam csak olyan (verziójú) böngészőkön jelenhessen meg, amit 100%-ig támogat mindent, amit az oldalam használ.
Ehhez ugye előbb tudnom kellene, hogy pontosan mit használ az oldalam. Ehhez valamelyik topikban láttam belinkelve a Can I use oldalát, talán ezzel el tudok indulni.
De van esetleg olyan oldal, ami "átnézni" az oldalamat, és megmondja, hogy milyen böngészőkből milyen verzió az alap, hogy gond nélkül fusson minden?
Mert ha meglenne ez a lista, akkor az oldal betöltése előtt ellenőrizhetném a böngésző verzióját, és ha az általam beállított (a megkapott) verzió alatt van, akkor csak egy információs lapot jelenítenék meg, hogy a böngésző verziója nem támogatott, frissítse stb.
Vagy van erre jobb módszer? Ti hogyan kezelitek/kezelnétek ezt?
(JS topikba írom a kérdést, mert gondolom, azzal a legegyszerűbb ezt kezelni.)
Köszi.
-
Taci
addikt
Egyből a biliárd játékok jutottak eszembe, és találtam is még tutorialt is hozzá:
JavaScript + HTML5 GameDev Tutorial: 8-Ball Pool Game
Van forráskód is, illetve maga a játék is a leírásban szereplő linkek alatt. -
Taci
addikt
Köszönöm szépen!
Ez a megoldás tuti eszembe nem jutott volna soha, főleg úgy, hogy csak sokadjára átnézve értettem meg, mi és hogyan is működik benne.Az escape-elést pedig már előtte megoldottam, ami keresőszavak a tömbbe bekerültek, azok már "tiszták".
Köszönöm még egyszer.
-
Taci
addikt
válasz
cstomee #8622 üzenetére
Belefutottam egy olyan hibába ezzel a kóddal, hogy amikor több szót is szeretnék kijelölni, és az egyik ezek közül a
mark
része (pl.ma
, vagy simán csak aza
betű), akkor a<mark></mark>
-ban lévő karaktereket is átírja, ezzel elrontva az egészet.A gond itt nyilván az, hogy már ugyanarra a sztringre hívom rá újra a kijelölő függvényt, amiben már benne vannak a mark tag-ek.
Ki lehet valahogy kerülni, hogy a kijelölő mark tag-eket is átírja? Mármint valami egyszerű módon.
Köszi.
-
Taci
addikt
válasz
martonx #8624 üzenetére
Na basszus, nekem pont ott törte a sort a böngésző cstomee válaszánál, hogy úgy tűnt, a "jsFiddle" még az előző linkhez tartozik, így fel sem tűnt, hogy az egy külön belinkelt példakód... Munka utána azonnal nézem is, a tiéddel együtt, martonx.
És megfogadom a tanácsot, ha újra elakadnék, linkelek példakódot mindenképp.
-
Taci
addikt
Ah, amit én ~50 sorban sem tudtam tökéletesen megoldani, te rendbe raktad ~10 sorban, úgy, hogy annak is a fele még logolás is...
Igazából kell még egy kis idő, hogy felfogjam, mi is történik itt...
(Értve ezalatt a
$1
-et és a zárójelezést avar textToMark
-nál stb..)Ismételten köszönöm szépen mindenkinek!
@cstomee: Amikor ide írok, már túl vagyok nagyon sok keresésen, kutakodáson, utánajáráson. Próbálom ennek a fórumnak az eszét csak akkor igénybe venni, ha már tényleg nem találom a megoldást saját erőből.
És "sajnos" élettapasztalat, ha valamit már nem írok alaposan körbe az elején, akkor később magyarázkodhatok és pontosíthatok, elvesztegetve sok időt és energiát.
De köszönöm az észrevételt mindenképp, igyekszem a jövőben kevésbé regényesre ereszteni! -
Taci
addikt
Készen is van az "ultimate kereső kijelölő"
https://jsfiddle.net/4awv16hg/16/
Rengeteg bug volt benne, de most már javítva vannak.
Illetve majdnem mind, mert ha vesszőre (",") keresek, meg infinte-loop-gyanús, pontnál (".") pedig kijelöl mindent mindenhol.
De látom, írt dqbd még valamit, ha visszajöttem, átnézem.
Köszi.
-
Taci
addikt
válasz
martonx #8617 üzenetére
Persze, jogos minden gondolat.
Azért nem írtam eddig, mert egyszerűsítettem, mert az előző változat már ránézésre is túlbonyolított volt.
Így talán egy fokkal egyszerűbb, és van benne példa is:
https://jsfiddle.net/4awv16hg/3/ (konzolba logolással)
https://jsfiddle.net/4awv16hg/4/ (konzolba logolás nélkül, ha zavaró lenne a sok plusz sor)Itt csak 1 elemen futtatom,
if
használatával, arra szépen lefut. Amúgywhile
-lal akarom (mert ha ez a függvény meghívódik, akkor 1 találat már biztosan van, szóval egyszer mindenképp le kell futnia), csak az a baj, ha átírom az if-et while-ra, akkor lefagy egy időre (felteszem, ismét valahol infinite loop) (logolásnál látszik, hogy valami nem stimmel a loop-ban), a logolás nélküliben pedig a konzolban írja, hogy "Invalid string length at markText".Szóval valószínűleg a ciklusban hibázok valamivel, mert a logban látszik, hogy a textContainerLocal elkezd "önmagába írni" már azután is, hogy elvileg megtalálta mindkét bejegyzést.
-
Taci
addikt
Igen, ezzel valóban a jókat jelöli ki, viszont az a gond továbbra is, hogy ha csupa kisbetűvel írom be a keresőbe a szót (pl. "máté"), akkor hiába szerepel az eredeti tartalomban nagy kezdőbetűvel (pl. "Máté"), a keresési találatokban átírja a keresésben megadott formára.
Ha pl. a textContainer az, hogy
"Alszik Máté, mert elfáradt."
, a keresési kifejezés pedig az, hogy "mÁtÉ", akkor bár kijelöli a megfelelő sztringet, viszont ez lesz a megjelenített sztring:"Alszik mÁtÉ, mert elfáradt."
Így csináltam meg, legalábbis itt járok benne:
https://jsfiddle.net/j7qt4bva/Ha "normál kifejezésre" keresek (pl. "máté" vagy "apple"), tökéletesen működik, de rövidebbekre (pl. "a" vagy "az") végtelen cikulsba kerül valahol.
(Amúgy sanszos, hogy erősen túlbonyolítva csináltam meg...)
Az alapötlet az, hogy a keresett szó pozícióinak megkereséséhez csupa nagybetűssé alakítom a szöveget, amiben keresek, és a keresett szót is. Aztán ha megvan a pozíció (vagy pozíciók, több találatnál), akkor egy tömbbe szétvágom az eredeti sztringet a találat pozíciók végén. Majd ezeken belül megcsinálom az öleted alapján (RegExp "i") a <mark> tag hozzáadását úgy, hogy a már megszerzett pozíciók alapján kiszedem az eredeti karaktereket (így meglesz az a változat, hogy a kis- és nagybetűk az eredetiben vannak).
Aztán ezeket a tömbelemeket összefűzöm újra, és ezt adom vissza.Csak valahol rövid(ebb) karakterszámnál végtelen ciklusba futok.
-
Taci
addikt
Keresés eredményéhez akarom kijelölni a találatokon belül a keresett szavakat.
Erre a<mark>
tag-et használom.function markText(textContainer, textToMark){
return textContainer.replace(textToMark, "<mark>" + textToMark + "</mark>");
}
Így viszont nem tudom kezelni a kis- és nagybetűket.
Pl. arra keresek, hogy "máté". A szerver visszaadja találatnak a "Máté"-t (nagy kezdőbetűvel) tartalmazó találatokat is (ehhez kapcsolódóan amúgy a PHP topikban van egy nyitott kérdésem, és nagyon összezavarodtam vele, ha valakinek magabiztos tudása van a keresés mikéntjével PHP-ban/SQL-ben, kérem, nézzen majd rá), viszont a JS csak azokat jelöli be, amik pontosan megfelel a keresésnek.
És nem tudom, hogyan kellene úgy módosítanom a fenti függvényt, hogy ha a szövegben az van, hogy "Máté" (nagy kezdőbetű), a keresési szöveg az "máté" (kis kezdőbetű), a találatban lévő sztringben a nagy kezdőbetűs Mátét is vegye körbe <mark> taggel. (Ha csak a kezdőbetűt kellene figyelni, könnyű lenne, viszont ugye lehet olyan találat is, ahol csupa nagybetű, vagy csak a 3. karakter nagy stb. És nekem az kellene, hogy kijelölje, bárhogyan is találja meg a "máté"-t: máté, Máté, MÁTÉ, mÁtÉ, MáTé stb.)
Lehet, valami nagyon egyszerű, és amint elküldöm a hozzászólást, eszembe is jut - de egyelőre nem jövök rá.
Hátha ti már találkoztatok ilyen helyzettel.
Köszi.
Új hozzászólás Aktív témák
Hirdetés
- Kazy Computers - Fehérvár - Megbízható?
- Luck Dragon: Asszociációs játék. :)
- Kertészet, mezőgazdaság topik
- sziku69: Fűzzük össze a szavakat :)
- Milyen SSD-t vegyek?
- Elder Scrolls IV - Oblivion - Olvasd el az összefoglalót, mielőtt írsz!
- Külföldi rendelések: boltok, fizetés, postázás
- Kerékpárosok, bringások ide!
- Nintendo Switch 2
- Székesfehérvár és környéke adok-veszek-beszélgetek
- További aktív témák...
- ASUS Radeon RX 7600 V2 Dual OC 8Gb - Aqua gari 26.12.12 ig
- Honor Pad X8a 64GB Wifi,1 év Garancia
- BESZÁMÍTÁS! Gigabyte B760M i5 14600KF 64GB DDR4 512GB SSD RTX 3080 10GB Corsair 4000D Airflow 1000W
- Bomba ár! Lenovo ThinkPad X390: i5-G8 I 16GB I 256GB SSD I 13,3" FHD Touch I Cam I W11 I Gari!
- Microsoft Windows, Office & Vírusirtók: Akciók, Azonnali Szállítás, Garantált Minőség, Garancia!
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: PC Trade Systems Kft.
Város: Szeged