- NVIDIA GeForce RTX 3060 Ti / 3070 / 3070 Ti (GA104)
- Az Apple megszerezné a klubvilágbajnokság közvetítési jogait
- Amlogic S905, S912 processzoros készülékek
- Sony MILC fényképezőgépcsalád
- Fujifilm X
- AMD Ryzen 9 / 7 / 5 / 3 3***(X) "Zen 2" (AM4)
- Milyen billentyűzetet vegyek?
- Vezetékes FÜLhallgatók
- Léghűtés topik
- Érkezik Magyarországa az LG szuper dizájnos hordozható projektora
Hirdetés
-
AMD Radeon undervolt/overclock
lo Minden egy hideg, téli estén kezdődött, mikor rájöttem, hogy már kicsit kevés az RTX2060...
-
iPaden is vége az App Store monopóliumának
ma Ősztől lehet alternatív alkalmazásboltból telepíteni az EU tagállamaiban.
-
Letartóztatták a bitcoin-Jézust
it Amerikai adókerülés vádjával, Spanyolországban tartóztatták le a bitcoin-Jézusként ismert Roger Vert.
-
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
-
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).
Én kérek elnézé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? -
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.
[ Szerkesztve ]
-
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..)
-
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!
Start with a whisper, end with a scream!
-
martonx
veterán
-
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;Start with a whisper, end with a scream!
-
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.Sk8erPeter
-
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/
-
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][ Szerkesztve ]
-
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.
-
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.Sk8erPeter
-
akyyy
senior tag
válasz Sk8erPeter #4218 üzenetére
majd megpróbálkozok vele mert tényleg elég macerás így leírni
-
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.
“All nothings are not equal.”
-
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?
-
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
[ Szerkesztve ]
-
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();[ Szerkesztve ]
-
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
[ Szerkesztve ]
-
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"Élj úgy, hogy ha majd lepereg előtted életed filmje, érdemes legyen végignézni!"
-
szoke12
őstag
válasz Sk8erPeter #4233 üzenetére
mivel tudnám megoldani?
"Élj úgy, hogy ha majd lepereg előtted életed filmje, érdemes legyen végignézni!"
-
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.[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
Jim-Y
veterán
-
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á...Sk8erPeter
-
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.[ Szerkesztve ]
Sk8erPeter
-
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
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
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?
-
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ő)
-
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.
tAm6DAHNIbRMzSEARWxtZW50ZW0gdmFka5RydIJ6bmkuDQoNClOBc4Ek
-
kemkriszt98
aktív 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...
[ Szerkesztve ]
"Tigris, tigris, csóvafény éjszakáknak erdején, mily kéz adta teneked szörnyü és szép termeted?" -William Blake-
-
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]. -
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
[ Szerkesztve ]
Új hozzászólás Aktív témák
- Újabb Samsungok telepíthetik a Galaxy AI-t
- Kerékpárosok, bringások ide!
- Letartóztatták a bitcoin-Jézust
- Képeken az egyik kameráját elvesztő Sony Xperia 10 VI
- Lakáshitel, lakásvásárlás
- Samsung Galaxy S24 - nos, Exynos
- Vodafone-ra áttért Digi Mobilosok
- Politika
- Xbox Series X|S
- NVIDIA GeForce RTX 3060 Ti / 3070 / 3070 Ti (GA104)
- További aktív témák...
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Ozeki Kft.
Város: Debrecen