- Apple MacBook
- Milyen belső merevlemezt vegyek?
- Intel Core i3 / i5 / i7 / i9 10xxx "Comet Lake" és i3 / i5 / i7 / i9 11xxx "Rocket Lake" (LGA1200)
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- Kezdő fotósok digitális fényképei
- Milyen processzort vegyek?
- Milyen monitort vegyek?
- Vezetékes FÜLhallgatók
- Házimozi belépő szinten
-
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
-
Sk8erPeter
nagyúr
válasz
honda 1993 #4299 üzenetére
Nem jó buli, sőt! Mindenki sokkal jobban élvezi, ha olyan kérdést tesz fel valaki, amiből lejön, hogy érdemben próbálkozott, nem csak szart bele, aztán várja, hogy mások a saját szabadidejüket erre áldozva majd szépen elmagyarázzák az illetőnek szájbarágósan a dolgokat (mert hát úgy nyilván sokkal kényelmesebb). Nálad a soktopicos tevékenységed alapján az látszik, hogy az első akadálynál feladod, és rohansz azonnal a fórumra segítségért. Így nem lehet fejlődni!
-
honda 1993
senior tag
válasz
Sk8erPeter #4298 üzenetére
nyilvan jo buli szivatni a masikat .ezt elhiszem.
a kovetkezo kerdesemre nyilvan megint ilyen valaszokat kapok majd.inkabb nem kerdezek koszi helo.
-
Sk8erPeter
nagyúr
válasz
honda 1993 #4294 üzenetére
"sajnos az ismerosom aki ehez ert is valamennyire, legalabb annyira idiota modon es erthetetlenul magyarazza amit kerdezek,es nem is a kerdesemre valaszol"
Az alapján, amiket eddig válaszoltál másik topicokban a segítő jellegű hozzászólásokra, valahogy kételkedve állok ahhoz, hogy az ismerősöd magyarázna "idióta módon és érthetetlenül"... egyébként kérdezni is tudni kell.Csak kíváncsiságból kérdezem: odáig megvan, hogy létezik egy úgynevezett <script> tag?
Szerk.:
Látom közben kaptál szájbarágós választ is, a francba, így még picit sem sikerült gondolkodásra és némi egyéni utánanézésre sarkallnunk...
Azért az kemény, ha ezen akadtál el, BÁRMELYIK említésre méltó JavaScript-segédletben megtaláltad volna ezt a választ. Gondolkozz el azon, amit Jim-Y írt.(#4295) Jim-Y: uff, jól beszéltél!
-
Karma
félisten
válasz
honda 1993 #4294 üzenetére
Ugye nem csak belehányod a kódot a HTML-be, hanem egy script taget raksz köré? Elmondásod alapján ez biztosan hiányzik.
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
</head>
<body>
<script>
console.log('Hello world!'); /* <-- ehelyett a saját kódodat rakd */
</script>
</body>
</html>De egyébként ha csak JS kísérletezést tartasz, akkor a JSFiddle a barátod lesz.
-
Jim-Y
veterán
válasz
honda 1993 #4294 üzenetére
A fórumok nem erre valók hogy valakit -1 -ről felhozzon a közösség. Az alapokat vagy neked kell netrol / könyvből megtanulni vagy szerzel valakit aki face2face tanít. A fórum arra van, hogy ha elakadsz a munka során akkor kérdezni tudj. Egyébként az első hsz tele van kezdőknek szóló tutorialokkal, ha azokon vegigragva sem sikerül mukodesre birnod egy sor kódot sem. Akkor a helyedben már most feladnam ezt a hobbit. Udv
-
honda 1993
senior tag
hali teljesen kezdo vagyok.
hiaba majmolom a tutorialokat,nem jovok ra hogy mi a baj.
azt sem tudom hogy hova irjam a javascript kodot, ( probaltam html-be Ágyazni ) de nem mukodott.
beirtam a bongeszobe hogy
localhost/gyakorlas/index.html es nem tortenik semmi,csak azt irja ki amit en a kodba irtam bele.
de nem vegzi el a muveletet.
szoval az a problema hogy fogalmam sincs hogy mit hova irjak,vagy hogy jo e az hogy html be Ágyazom a javascript kodot.
sajnos az ismerosom aki ehez ert is valamennyire, legalabb annyira idiota modon es erthetetlenul magyarazza amit kerdezek,es nem is a kerdesemre valaszol . szoval teljesen ossze vagyok zavarodva.
please help me
notepad ++ progit hasznalok
-
Jim-Y
veterán
Nem tudom, hogy erre gondoltál-e, de csináltam egy példát, hogy én mire: http://jsfiddle.net/aaddnh98/
-
Jim-Y
veterán
Figyeled az input field onchange (change) eventjet és valtozaskor az addig bevitt karaktersorozatot hasonlitod össze a kívánt szóval. Ha egyezés van, akkor vegrehajtod a parancsot. Pl azt ami kékre színezi a karaktereket. Ha ez nem kielégítő válasz akkor javaslom kérdezz jobban mert nem egyértelmű a kérdésed. Nagyon hiányos. Üdv
-
Joci93
senior tag
Sziasztok!
Azt hogyan lehet megcsinálni, hogy egy előre megadott szóhoz kapcsolunk egy programozási parancsot?
Például, ha leírom azt, hogy kék, akkor a betű színe kékre változik azonnal vagy a form elküldése után.
Azért írtam ebbe a topikba, mert szerintem a JS felé kell keresni a megoldást.Köszi.
-
-
Lacces
őstag
Hali.
$scope.customize = function(category, subCategory, id, result) {
var item = {};
console.log(category);
console.log($scope.sportEvents.category);
//....Számomra furca, hogy ha a console-ban a category: "labdarúgás" van kiírva, azt fogom, és $scope.sportEvents.category ide a category helyére beleégettem, hogy labdarúgás, akkor babán működik, megkapom a kívánt adatot.
Viszont, ha a fenti kódot próbálom alkalmazni, akkor szevasz, kapom az Undefined-ot a pofámba.Hogyan lenne szemantikailag helyes, hogy a category-t megemésze?
(A category változó tartalma dinamikusan változik.)
-
Jim-Y
veterán
A this használatát én ahol lehet elkerülöm, és másoknak is ezt javaslom. Már itt is írtam róla többször, aki nem tudja pontosan, hogy mikor mi a this az bele fog futni hibákba! Ezt ki lehet kerülni azzal, hogy pl event.target-et hívunk. A példában pont nem ez kellett, hanem az event.currentTarget, de ez most lényegtelen
Majd beállítom a feed-et akkor, köszi
Tervezek még írni, sőt, igazából csak most kezdtem, csak nincs sok időm mostanában :/
-
cSuwwi
senior tag
-
Jim-Y
veterán
válasz
kemkriszt98 #4281 üzenetére
http://jsfiddle.net/jkx6jcvL/1/
Biztos lehet jobban is.
-
DS39
nagyúr
válasz
kemkriszt98 #4279 üzenetére
nálam ez nem működik. (Firefox 24 ESR)
akkor se ha kiszedem a második "sávot". -
Jim-Y
veterán
válasz
kemkriszt98 #4277 üzenetére
Szerintem nem ártana működő példát feltenni
Egyébként: jQuery.closest()
-
kemkriszt98
tag
Sziasztok, ha megnézitek ezt az oldalt láthattok pár "barna" sávot... Ha a felhasználó rákattint az egyikre akkor az alatta lévő div le kellene gördüljön (jQuerry slide). Ez meg is van ha csak egy sáv van... viszont ha több van már nem tudom hogyan különböztessem meg, hogy melyik div melyik sávhoz tartozik... az általam választott módszer nem jött be...
Tudom, hogy ez a "barna" (így) bűn ronda, nyugalom a végleges oldalon képeket használok majd
-
Jim-Y
veterán
Sziasztok!
Nem tudtok olyan API-ról ami ajax kérések mockolását teszi lehetővé és jQuery független? Tehát a mockjax nem játszik. Lehet kliens vagy szerver API is. Üdv
-
cSuwwi
senior tag
válasz
pumatom #4271 üzenetére
Nem feltétlenül kell külön js file (ha csak egyéb oka nincs).
1 http query-t spórolhatsz vele, ha csak 1 js filet használsz erre 2 helyettlekéred az ablak szélességét, és a megfelelő ágra tereled
ha van jQuery akkor ott ez a feltétel:if ($(window).width() < 768){
}Ha nincs akkor natívban: window.innerWidth-el lehet játszani.
A többi gondolom fog menni. -
pumatom
aktív tag
Sziasztok!
Van egy dobozom, amiben vannak beviteli mezők. Ezt a dobozt egy .js file-lal tudom úgy állítani, hogy csak a fejléc látszódjon, majd kattintásra bizonyos pixelnyi távolságot feljebb ugrik.
Szeretném mobilra is megcsinálni; arra gondoltam, hogy ugyanezt a .js file-t másolom, és a mobilhoz megfelelő paraméterekkel ellátom a másolatot, és egy másik névvel látom el.
Viszont a kérdés az az, hogy hogyan tudnám úgy behúzni a html file-ba, hogy azt a max-width szerint nyissa meg?
Mondjuk 1920-ig a box.js-t használja, 320-ig a mobile.js-t használja.
Próbáltam a media query-vel egymás után beállítani a 2 .js file-t, viszont, csak az elsőt használja, hiába van mérethez állítva a használata.
Jóllehet nem ez a megoldás, gondoltam hátha.
Van ötletetek, hogy hogy tudnám ezt megoldani?
-
Karma
félisten
válasz
kemkriszt98 #4266 üzenetére
Nananananananana Batman!
Csak a megfelelő kulcsszavakra kell keresned Google-ben, és láthatod, hogy elég népszerű a Blender és a Three.js library összekötése, amivel pont azt össze tudod hozni WebGL alapon, amit szeretnél. Például itt van egy tutorial.
-
Sk8erPeter
nagyúr
válasz
kemkriszt98 #4266 üzenetére
"Nanananana..." Nem lehet, hogy egy kissé topicot tévesztettél?
-
martonx
veterán
válasz
kemkriszt98 #4266 üzenetére
Akkor tegyél be unity-t a web oldaladba. Az kimondottan pont erre való.
-
kemkriszt98
tag
válasz
Sk8erPeter #4262 üzenetére
Nanananana... javíts ki ha tévedek de itt a kocka divekből áll... én viszont 3d-s modell alatt konkrétabban egy 3d-s modellt értek
Tehát leülök mondjuk a blender elé és alkotok valamit...
Megjegyzem nagyon jó vagyok már a színes téglalapok modellezésében
-
Sk8erPeter
nagyúr
válasz
martonx #4264 üzenetére
Én sem szántam időt rá, hogy nyomozzak, ettől még tény, hogy a z koordináta irányába nincs kiterjedése a kockának, és valahogy nem lep meg, hogy a népszerű böngészők közül csak IE11-nél fordul elő a dolog.
Itt is ugyanaz a probléma Internet Explorernél, többinél nem (ezek mind csak 5 másodperc guglizás alapján jöttek ki, de egyiknél sem volt kedvem egyelőre nézegetni a kódot egy minimális rápillantást leszámítva):
http://css-tricks.com/creating-a-3d-cube-image-gallery/Majd lehet, hogy meló után ránézek, mi van a kódban, hogy mégis pontosan mitől nem működik. De nem biztos, hogy lesz kedvem.
Ez viszont működik IE-n is:
http://codepen.io/thebabydino/pen/bdvya -
martonx
veterán
válasz
Sk8erPeter #4263 üzenetére
Ahogy végigfutottam a css-t, js-t (kemény pár sorokról beszélünk), ennek simán mennie kellene IE-n. Inkább a demo oldalon lesz valami gikszer, ami miatt IE-n nem megy. Mondjuk időt nem szántam rá a komolyabb nyomozásra, de semmi olyat nem csinál a kjis css, js, ami IE11 alatt ne működhetne.
-
Sk8erPeter
nagyúr
válasz
Sk8erPeter #4262 üzenetére
Egyébként nyilván egészen megdöbbentő lenne, ha ez IE11-ben már működne. Mondom én, hogy néha azt gondolom, az IE már böngészőnek számít, de aztán mindig rá kell jönnöm, hogy nem.
-
Sk8erPeter
nagyúr
válasz
kemkriszt98 #4261 üzenetére
-
kemkriszt98
tag
Sziasztok!
Ha nem ide való a kérdés akkor bocs de a google találatok alapján js el lehet ezt a problémát megoldani...
Szóval, van valakinek tapasztalata 3d-s modellek megjelenítésében egy oldalon? Örülnék pár személyes tapasztalatnak azzal kapcsolatban, hogy mi erre a legjobb mód.
Szerk.: A dolog úgy lenne az igazi ha a cucc interaktív volna tehát a látogatók forgathatnák meg ilyenek
-
Jim-Y
veterán
Ti milyen külföldi fórumokat szoktatok olvasgatni? Szeretném bővíteni azon oldalaknak a tárházát amiket metrózás közben olvasok, de azok érdekelnének amik minőségiek.
Jöhet felsorolás szerűen, köszi. üdv
-
martonx
veterán
Ja, hogy mobilon. Ok, valóban egy jellemzően két magos ARM procit valóban nem lehet összehasonlítani egy szerver processzor erejével, de a szervert meg pillanatok alatt túl tudod terhelni ilyen felesleges munkákkal, amire pont az angularjs lenne a való.
Ha teljesítmény problémáid vannak az angularral, akkor javaslom a knockout-ot helyette. Az szerintem két fokkal gyorsabban teszi a dolgát.
Másrészt valami programtervezési problémát érzek ott, ahol kliens oldalon több ezer / tízezer objektumot kell mozgatni, renderelni. -
Lacces
őstag
válasz
martonx #4255 üzenetére
Lehet gyors, de mobilon a kliens oldali rendezes lassabb szemre nalam
(laptopon okes.). Bar egyszerubb nekem szerver oldalon rendezni.
Az Angulart nem nehez hasznalni, csak meg igy az elejen jarva nem latom at, mi merre pontosan. Igen, az angular a kliens oldal lelke. jQuery szamuzve. Eredetileg abban csinaltam meg egy ugyfelnek a cuccot, de nekem is hasonlo projektem van, es meg kell mondjam jobb most ide az Angular arra a feladatra, amire en akarom. Engem megvasarolt kilora, meg legalabb akkor jobban belefolyok a js-be is, eddig nem rajongtam erte, de az Angular altal kezdem megszokni, na meg a Grunt is jo eszkoz. -
dqdb
nagyúr
Nem asszociatív tömböt hozol létre, hanem egy objektumot propertykkel, és nem a space-szel és ékezetes karakterekkel van a probléma, ugyanis JS-ben egy property neve megkötések nélkül lehet bármilyen szám vagy szöveg, hanem azzal, hogy elfelejted a kategória szintjét inicializálni.
Ha 10-20 elemnél többet küldesz le a szerverről, akkor azt érdemes kategória-alkategória szerint rendezve megtenni, ekkor a legutoljára használt kategória és alkategória cache-elésével sokkal gyorsabban fel tudod építeni a kétszintű fát.
-
Jim-Y
veterán
-
Lacces
őstag
Hali.
Javascript-ben kell egy tömbön végig mennem, amiben json objektumok vannak. És mivel csoportosítani kellene a nyers adatokat, akkor probálok automatikusan létrehozni egy asszociatív tömböt, ami bukó sajnos, mert van space, vagy speckó ékezetes magyar karakterek...
Legyen ez a nyers adat (az elegendő)
[{category: "játékok", sub_category: "angol legó"}]és akkor egy forEach-ben:
var list = {};
angular.forEach(data, function(element) {
var key = element.category;
var sub = element.sub_category;
// És itt jönn a hiba, hogy az angol legó property nem jó. list.játékok.angol legó -ra nem tudok hivatkozni.
list[key][sub] = element;
});Nézegetem google-ban a cuccost, de egyelőre nem találom a megoldást. Ilyenkor mit lehetne csinálni?
PHP-ban így tudom rendezni, de inkább teszek egy próbát angularjs-sel, hátha kliens oldalon összelehetne ezt barkácsolni (elméletben a javascript sok mindenre jó).Vagy másmilyen "asszociatív tömb" kell, vagy kódolni kellene a tömb kulcsokat...
-
Jim-Y
veterán
válasz
kemkriszt98 #4248 üzenetére
Szia. Én nem értek túlságosan a jQuery-hez, de még a tanulásod elején megemlíteném, hogy érdemes 1-2 good-practice-t betartani.
Az egyik ilyen, hogy kerüljük a this használatát. Amikor csak lehet használjunk mást. A példádban is lehetett volna mást használni, és ennek nem csak az az előnye, hogy olvashatóbb, és érthetőbb lesz a kód, vannak olyan helyzetek, amikor rossz működésre vezet a this használata.
Demo (rossz eset, amikor a példád hibázna, nem várt eredményre jutna):
http://jsfiddle.net/Jim_Y/tsucL8je/18/
Mi történt?
- két divet ágyaztunk egymásba. jQuery-vel egy eseménykezelőt állítunk a div-re, és azt várnánk, hogy amelyik kockára kattintunk, az majd 100px-el lejjebb kerül. Nem ez történik!
- ad1: propagation, a selector nem egy, hanem 2 elemet is "matchel", először azon fut le az eseménykezelő amire ténylegesen kattintottál, tehát a .inner, majd propagál és a .outer div-en is le fog futni az eseménykezelő.
- ad2: a this mindig az aktuálisan "propagált" elemre mutat. Tehát az első loop-ban a this a .inner, majd a következőben a this a .outerEmiatt mindkét div lejjebb fog kerülni, talán 100px-nél nem is olyan feltűnő, de egy kattintásra az a div amin eredetileg kattintottunk (.inner) összesen 200px-el csúszott lejjebb.
Megoldás vol1:
Cseréljük le a this-t, ahogy eredetileg is javasoltam event.target-re.
http://jsfiddle.net/Jim_Y/tsucL8je/19/
Mi történt?
- még mindig furcsán működik, még mindig nem azt tapasztaljuk amit szerettünk volna, most egy kattintásra a .inner kocka 2x100px-el lejjebb került.
Ez azért van, mert az event.target minden loopban ugyanaz, arra mutat amelyik elemre kattintottunk az egérrel. (megjegyzés: az event.currentTarget minden esetben === this)
Első ciklusban event.target -et eltoltuk 100px-el, majd jön a második ciklus (propagation ugyebár, vagy bubbling effect, ki hogy ismeri) ahol ugyancsak event-targetet toltuk el 100px-el.
Megoldás vol2:
http://jsfiddle.net/Jim_Y/tsucL8je/20/
Mi történt?
- itt már szinte az történik amire számítottunk, amire kattintunk az 100px-el lejjebb kerül és nincs propagation. Persze ha a .outer div-re kattintunk akkor az inner is lejjebb kerül, ez annak a következménye, hogy az inner az outeren belül van foglalva. Ezen nem tudunk segíteni, csak ha máshogy írjuk meg a html-t.
Összefoglalva:
* event.target statikus, mindig arra mutat amire ténylegesen kattintottunk (vagy általánosabban fogalmazva, amelyik node-on az esemény létrejött)
* this az változik, illetve sok esetben nem lehet megmondani, hogy most éppen mire is mutat a this, jobb ezt elkerülni.
* event propagation. Ezt is figyelembe kell venni bizonyos esetekben.Üdv
-
CSorBA
őstag
válasz
kemkriszt98 #4246 üzenetére
1, Kell hozzá jquery (Bal oldalt be kell tölteni a Framework & Extensions résznél).
2, A this az this nem pedig "this" [link]. -
kemkriszt98
tag
Sziasztok, belevetettem magam a jQuerry-be és máris akadályba ütköztem... nem nagyon akar megmozdulni az a div...
Ok, módosítom a kérdésem... mi a baj a "this"-el... mert, hogy anélkül megy...
-
dqdb
nagyúr
Opera 12-ben pont az a leggyorsabb
getElementById 2,753,807
querySelector 249,225
getElementsByClassName 1,654,260
querySelectorAll 3,278,591
jQuery - id 849,313
jQuery - class 160,468Opera 25 (más Blink motoros böngészőben hasonlóak lehetnek az értékek):
getElementById 16,966,523
querySelector 6,662,027
getElementsByClassName 15,028,808
querySelectorAll 284,449
jQuery - id 1,267,419
jQuery - class 333,583Szóval bár Cathfaern magyarázata szerintem teljesen logikusnak tűnik, a számok alapján egyszerű optimalizálatlanság lehet a háttérben. Az igazán érdekes számomra az, hogy a többi megoldásnál látható hatalmas különbségek jQuery használatával mennyire eltűnnek.
-
Cathfaern
nagyúr
Felteszem az az oka, hogy abban teljes css-szerű selectort meg tudsz adni, nem csak classokat. Ezért általános megoldást alkalmaz, míg direkt classra keresés esetén lehet spec optimalizálást használni az implementációban (illetve kezdjük ott, hogy alapból be kell parsolni a selector stringet, ami plusz idő)
-
Jim-Y
veterán
http://jsperf.com/comparison-of-getelementby-and-queryselector
Nem tudjátok véletlenül, hogy a querySelectorAll miért teljesít ilyen rosszul?
-
sztanozs
veterán
válasz
Sk8erPeter #4238 üzenetére
HTA-t "programozunk" VBS + JS kombóval, abban bőséggel meg lehet csinálni. Persze ez régi is, meg IE is, meg az MS szutyka
-
Sk8erPeter
nagyúr
Hát végül is ötletadónak nem rossz, de szerintem értelmesebb lenne akkor már inkább más nevet adni az ilyen custom kódoknak, ha már az eredeti működést elcseszi.
Mármint ha kiemeljük a kontextusból az event handlert, és fogalmunk sincs róla, hogy ez úgy készült, hogy át lett definiálva a beépített addEventListener, mert mondjuk más fejlesztők vagyunk, mint aki ezt készítette. Szóval ez akkor lenne poén, ha az eredeti szintaktikával is helyesen működne (értsd: az event handler az eventet kapná első argumentumként, ahogy eredetileg is van, nem az event.targetet), és így "hordozható" lenne. Na mindegy, amúgy jópofaszság.
Fú de sokat pofáztam, szóval így jobb sztem akkó' má':
http://jsfiddle.net/LLkV4/2/
De nem is tudom, minek analizáltam ennyit a dolgot, fáradt vagyok. -
Sk8erPeter
nagyúr
válasz
sztanozs #4236 üzenetére
"Bár igazából, ha a JS-nek van joga írni a lokális drájvra, akkor fizikailag is képes kiírni a módosított HTML-t, vagy akár neten átküldeni."
Kérlek mutass a kiemelt részre példát korunk népszerű böngészőiben futó, kliensoldali JavaScript-kóddal, az IE régi ActiveX-es szutykai nélkül, hogy hogyan oldanád meg ezt a feladatot (felőlem használhatsz library-t is)! Tényleg kíváncsi lennék rá... -
Jim-Y
veterán
-
sztanozs
veterán
válasz
szoke12 #4232 üzenetére
Ha csak a DOM-ot szeretnéd szerkeszteni (pl új elemek megjelenítése a weboldalon), az megoldható.
Bár igazából, ha a JS-nek van joga írni a lokális drájvra, akkor fizikailag is képes kiírni a módosított HTML-t, vagy akár neten átküldeni.
Erre a fajta interaktivitásra találták ki a JS-t. -
szoke12
őstag
válasz
Sk8erPeter #4233 üzenetére
mivel tudnám megoldani?
-
szoke12
őstag
helló! meg lehet javascriptben oldani, hogy az oldal módosítsa konkrétan a html-t, vagy hozzon egyet létre? interaktívvá szeretném tenni.
előre is köszi -
Jim-Y
veterán
Na, akkor legalább volt értelme a példának.
Ezt írja a konzolra:
Vagyis
10
10
10
10
10Magyarázat: (ha esetleg valamit rosszul írnék, akkor javítsatok ki többiek, nem szeretném ha valamit az én hibámból jegyezne meg rosszul
1:
for (var i = 1; i < 6; ++i) {
//...
}Ezt az interpreter így értelmezi:
var i = undefined;
for(i = 1; i < 6; ++i) {
//...
}Tehát az i ciklusváltozót felemeli a függvény törzsének elejére, majd undefined-ként deklarálja.
2:
cont.addEventListener('click', function () {
console.log(i);
});Minden click eseményre a cont objektumon/elementen regisztrál egy névtelen függvényt. A lényeges momentum, hogy minden függvény javascriptben látja/tartalmazza az őt körülvevő függvények kontextusát.
function a() {
var i = 10;
function b() {
var j = function() { return 11; };
function c() {
console.log(i); // 10
console.log(j()); //11
}
c();
}
b();
}
a();Az eredeti példánál maradva az anonim függvény látja az őt körülvevő test függvény kontextusát, így az i változót is. Az addEventListener függvényel olyan működést definiálunk, ami valamikor a jövőben fog lezajlani (amikor klikkelünk az elemre), ezért a ciklus már rég végez mire mi az elemre klikkelünk.
3:
amikor végül rányomunk a div-re, az i már a ciklus végén 6, majd egy újabb értékadással i = 10. Ne felejtsük, hogy az összes anonim függvény "cipeli" magával a test függvény kontextusát amiben az i változóhoz már a 10 érték van rendelve, ezért fog 5 x 10-et kiírni a program a konzolra.A megoldás az lehet, ha minden anonim függvénynek/hez egy új kontextus-t rendelünk, amiben az i változó a ciklusban éppen aktuális értéken fog szerepelni.
Példa és megoldás:
var cont = document.querySelector('#container');
function test() {
for (var i = 1; i < 6; ++i) {
(function (i) {
cont.addEventListener('click', function () {
console.log(i);
});
}(i));
}
i = 10;
}
test();A (function() { .. }()); egy új kontextust generál amibe elmentjük az i ciklusváltozó aktuális értékét így az mindig fix marad.
üdv
-
Jim-Y
veterán
Élő példa, hogy mire jó még:
Találós kérdés, mit ír ki ez a program, anélkül, hogy kipróbálnád?!
<div id="container">Katt ide</div>
########################################
var cont = document.querySelector('#container');
function test() {
for (var i = 1; i < 6; ++i) {
cont.addEventListener('click', function () {
console.log(i);
});
}
i = 10;
}
test(); -
Jim-Y
veterán
Ez egy IIFE (immediately invoked function expression). Bővebben erről itt olvashatsz. Ben Alman - IIFE
Azért jó, mert
1: csinálsz egy függvényt, ezzel ugye egyből egy új variable environmentet
2: rögtön meg is hívodAmi az iffy-n belül van az nem "szennyezi" a globális névteret. A pattern segítségével le is tudjuk védeni az egyes könyvtárakat. Például a következő kódban a jQuery object-re $-ként tudunk hivatkozni anélkül, hogy félnünk kéne, hogy egy másik 3rd party library közben "felüldefiniálná" a "$" jelet.
Például:
(function($) {
}(jQuery));Az pedig, hogy miért jobb nem szennyezni a globális névteret, elsőszámű good-habit. Ennek utána tudsz olvasni neten.
Egyébként erre épül nem egy pattern, például a self revealing module pattern is. Erről itt olvashatsz bővebben: Addy Osmani - Design Patterns #revealingmodulepattern
-
Zedz
addikt
Sziasztok,
Láttam egy olyat, hogy jó "szokás", ha a szkriptünket a következő közé írjuk:
(function(){
// js kód ...
})();Olvasgattam utána, de még mindig nem nagyon világos, miért jobb így kezdeni egy szkriptet, mint e nélkül. Van erre valami egyszerű magyarázat, vagy ez már mély víz?
-
Karma
félisten
Megnéztem a kódot, szerintem annyi híja van, hogy az innerText | textContent eredményét körbe kell venned egy parseInt hívással. Ez a függvény a szöveg elején lévő számot dolgozza fel, minden más maszlagot figyelmen kívül hagy.
Tehát:
var seed = parseInt(tttrtd[7].innerText || tttrtd[7].textContent);
var dls = parseInt(tttrtd[6].innerText || tttrtd[6].textContent);És így ha a szöveg "5 letöltő", akkor az eredmény 5 lesz.
-
akyyy
senior tag
válasz
Sk8erPeter #4218 üzenetére
majd megpróbálkozok vele mert tényleg elég macerás így leírni
-
Sk8erPeter
nagyúr
Jobb lett volna, ha felrakod pastebinre, ahogy Karma kérte, úgyhogy megtettem helyetted:
http://pastebin.com/tETmVhy8Nekem most így minta nélkül nincs időm, meg kedvem igazán foglalkozni vele, azért kicsit könnyebb lenne egy jsFiddle-linkkel, azonbelül egy mintatáblázattal, hogy mi is nem működik. Mert így meg gondolkozni is kell, hogy mit is akarhatsz, és az így reggel nem jó.
No de hátha szán rá valaki időt. -
akyyy
senior tag
Üdv. Van egy scriptem, amivel Chrome és Tampermoney kiegészítővel tudok mindenféle extrát tenni különböző oldalakra.
Van pl ez a script.
A gondom az, hogy egy másik oldalra szeretném átülteni. Kb már mindennel megvagyok, csak az a baj, hogy az egyik oszlopban szöveg is van, így azt nekem nem tudja kiemelni, mivel hiába írom be hogy 100-tól felfele mutassa, nem tudja értelmezni azt hogy " 123 letöltő"Gondolom az elejére a scriptnek kellene írni hogy vágja le az oszlop végén lévő ..."letöltő" részt, hogy csak az első, számkaraktereket vegye figyelembe, de én annyira nem értek hozzá
Nem tudom jó helyre írtam-e ezt, ha nem akkor bocsi.
-
knoxhu
senior tag
Sziasztok!
Van valami lehetőség ennek a scriptnek az átültetésére egy másik oldalra, magyarítással együtt?
[link] -
Jim-Y
veterán
Egy csomó mindent még vizsgálni kéne benne, de azt már nincs kedvem gy éjjel :/
Talán innen is el tudsz indulni. Illetve ha már ennyit leírtam, akkor már nem törlöm ki: http://jsfiddle.net/Jim_Y/YXqCj/
-
Sk8erPeter
nagyúr
A query string mező-érték párosait kb. így tudod kinyerni:
http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript/21152762#21152762
(a threadben több ötlet is van)Mondjuk ez függvénybe rakva:
function getQueryStringValues() {
if (window.location.search === "") {
return null;
}
var queryDict = {};
window.location.search.substr(1).split("&").forEach(function(item) {
queryDict[item.split("=")[0]] = item.split("=")[1];
});
return queryDict;
}"Lényegében ki kellene nyerni az URL-ből az ?id= után álló számot és azzal generálni az új URL-t, valahogy így:
self.location='modify.php' + '?id=' + ID + '?cat=' + val;"
Ez pedig hibás, mivel a query string előtt egyszer kellene csak szerepelnie a kérdőjelnek, többször nem szabadna előfordulnia, a különböző kulcs-érték párokat &-jellel lehet elválasztani egymástól. -
Agony
aktív tag
válasz
martonx #4207 üzenetére
Elnézést, javascriptről van szó.
Nem tudom jsfiddle példával illusztrálni, mert nem értek a javascipthez, de próbálom a lényeg röviden és tömören:A nevezési oldalon a módosítás gomb megnyomásakor átugrik egy másik URL-re és hozzáfűzi a USERID-t mysqlből így a modify oldalon annak a versenynek az adatai jelennek meg amit módosítani akar:
http://XXXXX/modify.php?id=21Ezen az oldalon 2 dropdown list van egy html formban, ami egymástól függ, tehát ha az elsőben kiválaszt valamit a user, akkor a másodikban annak megfelelő tartalom jelenik meg. Az első listában való választás után a javascript frissíti az oldal URL-jét és hozzáfűzi a választott kategóriát, ennek alapján jelenik meg a második lista tartalma:
function reload(form)
{
var val=form.cat.options[form.cat.options.selectedIndex].value;
var cim = window.location;
self.location= cim + '?cat=' + val ;
}
</script>Ezzel csak az a baj, hogy a címben szereplő url utolsó ID-t követő része változik. Eredetileg a modify.php-hez fűztem hozzá a kategóriát, de úgy nem volt ID, most a window.locationhoz, így viszont több váltás esetén sorra fűzi hozzá a ?cat= végződéseket.
Lényegében ki kellene nyerni az URL-ből az ?id= után álló számot és azzal generálni az új URL-t, valahogy így:
self.location='modify.php' + '?id=' + ID + '?cat=' + val; -
-
Agony
aktív tag
Sziasztok!
Egy kis segítséget szeretnék kérni JAVA-ban, mert abszolút nem vagyok járatos benne és sehogy sem sikerül működésre bírni az elképzelésem.
PHP oldalon van egy HTML form, amiben 2db dropdown lista van. Mindkét lista MySQL lekérdezésből nyeri az értékét és a második lista értékei az első lista változásának megfelelően kerülnek szűrésre.
Ez eddig rendben is működött, az első listát beszűrve egy kis java script frissítette az oldal URL-jét az első listában választott értéknek megfelelően és a második lista ennek alapján jött létre.
Viszont most bele kellett passzíroznom ezt a működő kódot egy olyan oldalba, ahol már eleve egy dinamikusan változó URL kerül a java url frissítés által generálódot URL elé és teljese a káosz. :S
Tehát van egy kezdő oldal a nevezeseim.php, amin kilistázza az adott felhasználó nevezéseit és minden nevezés mellett van egy módosítás gomb. Ha ezt választja átugrik a modositas.php?id=** oldalra, ahol egy kétszámjegyű szám, amit MySQL-ből nyer (felhasználó ID) és ez alapján tölti be a nevezési adatokat amiket módosíthat.
Itt jön be a két dropdown lista és a java, mert ha az első listát módosítom (ez a verseny kiválasztása) akkor a java script frissíti az URL-t és hozzá fűzi az eredeti URL-hez a '?cat=' részt plusz egy a verseny kategóriájának megfelelő számot, tehát valahogy így néz ki: http://xxx/modify.php?id=21?cat=1
A probléma ott kezdődik, hogy ahányszor frissíti az oldalt verseny váltás miatt, annyiszor fűzi hozzá a java által generált URL részletet, tehát 2-3 verseny váltás után már a kód kb. így néz ki:
http://xxx/modify.php?id=21?cat=1?cat=4?cat=2Most a kód így néz ki:
<SCRIPT language=JavaScript>
function reload(form)
{
var val=form.cat.options[form.cat.options.selectedIndex].value;
var url = window.location
self.location= url + '?cat=' + val ;
}
</script>A kérdésem pedig az lenne, hogy van-e valami olyan java kód, amivel az URL egy bizonyos részét lehetne kivágni és akkor a self.location lehetne: 'modify.php?id=' + KIVÁGOTT RÉSZ + '?cat=' + val;
Elnézést, hogy ilyen hosszúra sikerült és előre is köszönöm a válaszokat!
-
Jim-Y
veterán
válasz
martonx #4204 üzenetére
Szerintem túlreagálod
Én úgy érzem, hogy ebben az esetben ez nem félrevezető, vagy nehezen olvasható. De amúgy természetesen az alapproblémával egyetértek. Sokszor ki is lett már tárgyalva itt a topikban. Egyébként már csak az api-val való "konzisztencia" miatt is ezeket használtam -> restifyMeg amúgy is készítek dokumentációt..
(persze..attól, hogy valaki hülyeséget ír, még nem kell nekem is úgy csinálni, de a req, res, err szerintem elég beszédes. Azért ez nem olyan mint az a, b, e stb..)
-
Jim-Y
veterán
FYI
Amúgy végül tényleg az első megoldás lett a nyerő, vagyis ezt alkalmaztam a többi függvénynél is. Már csak azért is, mert ezzel az olyan függvényeknél is analóg módon tudom megoldani a hibák lekezelését amik alapból nem promissal térnének vissza.
Kis magyarázat:
- a mongoose api-nak vannak Query tipusú függvényei, amiken lehet hívni exec()-et, ami miatt Promissal térnek vissza. Ilyen például a find(), vagy a findById(). Ezeknél elég volt (lett volna) ennyit írni az ArticleProviderbeArticleProvider.prototype.findAll = function() {
return this.Article.find().exec();
}majd a hívó oldalon már le tudom kezelni a Promise-t.
function getArticles( req, res, next ) {
var promise = articleProvider.findAll();
promise.onResolve(function( err, articles ) {
if( err ) { .. }
// handle
});
}Ez mind szép, és jó, de vannak olyan mongoose függvények amik nem promissal térnek vissza. De az előző posztban mutatott módszerrel ezeket is sikerült promisokkal megoldani, ezért választottam végül ezt a megoldást.
-
Jim-Y
veterán
válasz
martonx #4201 üzenetére
Szerinted ebben hol van elcsépelt rövidítés? Gondolom nem a res, req, err - re gondolsz mert azokkal nincs baj, eléggé konvencionalisak. De ezek szerint arra gondolsz amiket én deklaraltam valtozokat. De ebből meg csak három van.
promise, self, articles. Ezek közül melyik ami rossz? -
martonx
veterán
Nekem mindegy, de ezeket az elcseszett rövidítéseket nagyon gyorsan gyomláljátok ki! Az intellisense és a js minifikálás korában ne szopassuk már magunkat ilyen rövidítések használatával. Fontosabb az olvasható kód, mint a forráskódban megspórolni pár karaktert (amit aztán a minifikálás úgyis a, b és c-re fog cserélni éles környezetben).
Új hozzászólás Aktív témák
Hirdetés
- Apple MacBook
- Milyen program, ami...?
- Honor 200 Pro - mobilportré
- Milyen belső merevlemezt vegyek?
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- Intel Core i3 / i5 / i7 / i9 10xxx "Comet Lake" és i3 / i5 / i7 / i9 11xxx "Rocket Lake" (LGA1200)
- Kerékpárosok, bringások ide!
- Motorolaj, hajtóműolaj, hűtőfolyadék, adalékok és szűrők topikja
- Fotók, videók mobillal
- Le Mans Ultimate
- További aktív témák...
- Beszámítás! Apple Mac mini 2023 M2 Pro 16GB 512GB SSD számítógép garanciával, hibátlan működéssel
- LG 42C4 - 42" OLED evo - 4K 144Hz - 0.1ms - NVIDIA G-Sync - FreeSync - HDMI 2.1 - A9 Gen7 CPU
- REFURBISHED és ÚJ - HP USB-C/A Universal Dock G2 docking station (5TW13AA) (DisplayLink)
- RÉSZLETRE , Bankmentes , kamatmentes Asus Rog Zephyrus G16
- Iphone 16E 128GB Fekete Bontatlan 24 Hónap Garancia
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest