- sziku69: Fűzzük össze a szavakat :)
- gban: Ingyen kellene, de tegnapra
- Luck Dragon: Asszociációs játék. :)
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Szoszo94: Xiaomi Mi Router 3G - Padavanra fel!
- Gurulunk, WAZE?!
- Geri Bátyó: B550 szűk keresztmetszet, de mi és miért?
- sh4d0w: Csak a profit - emberélet nem számít
- vrob: Az IBM PC és a játékok a 80-as években
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
-
LOGOUT
JavaScript != Java (A JavaScript nem összekeverendő a Javával, két különböző programozási nyelvről van szó!)
Új hozzászólás Aktív témák
-
Karma
félisten
Azért bonyolultabb ennél a helyzet, mert a request szigorúan aszinkron működik, azt mondani a Node-nak hogy "most fagyjál le amíg megjön a válasz" nem lehet.
Ha csak egy valamit akarsz csinálni, kirakhatod a callback függvényt egy külön, külső függvénybe, és név szerint adhatod oda a requestnek. Ezzel el lehet lavírozni, de tisztább, ha vagy az async, vagy a promise-alapú modulok (Q, when) valamelyikét berakod és láncot fűzöl a jövőbeli hívásokból.
Amit linkeltem forrás a whent használja erre.
-
Karma
félisten
Persze, csak rakd be a végső kiírást a feldolgozás végére.
var request = require('request');
var cheerio = require('cheerio');
var szoveg = new Array();
request('https://news.ycombinator.com', function (error, response, html) {
if (!error && response.statusCode == 200) {
var $ = cheerio.load(html);
$('span.comhead').each(function(i, element){
var a = $(this).prev();
szoveg.push(a);
});
}
console.log(szoveg); // <--- lentről, ide
}); -
Sleed
aktív tag
sziasztok,
var request = require('request');
var cheerio = require('cheerio');
var szoveg = new Array();
request('https://news.ycombinator.com', function (error, response, html) {
if (!error && response.statusCode == 200) {
var $ = cheerio.load(html);
$('span.comhead').each(function(i, element){
var a = $(this).prev();
console.log(a.text());
szoveg.push(a);
});
}
});
console.log(szoveg);adott a fenti minta kód, a weboldalról scrapelt címeket tenné egy tömbbe.
Valaki tudna nekem abban segíteni hogy hogyan kéne átírnom, hogy a tömb kiírása előtt megvárja a request befejeződését?
visszaolvastam, tudom, már sokszor felmerült a kérdés, de nem sikerült sehogy sem megoldanom a problémát
-
Sk8erPeter
nagyúr
válasz
martonx #4095 üzenetére
Ja, vagy használható simán a this is az event handlerben, ugyanarra vonatkozik.
(#4089) Jim-Y :
még erre a részre az előbb elfelejtettem reagálni:
"Hát de ez mi? Nem tudom kitörölni a hsz-ből a dőlt bekezdéseket, mert visszteszi őket :/"
Egyértelmű, a szövegedben látszik:
"Na és valahol itt írtam be a topikba, hogy hátha valahogy meg lehet úgy csinálni, hogy az eventHandler függvénynek átadom a aButtons(i) referenciát mint thisArg"
-->
itt az "aButtons[i] referenciát" szövegrésznél a szögletes zárójelbe rakott [i] zavarta meg egész konkrétan. Elfelejtetted a Konvertálatlan/Programkód gombok valamelyikének használatát. -
Sk8erPeter
nagyúr
Hű basszus, na ez ciki, jó tompa voltam, bocsánat. Most visszanézve a hsz.-eket, így már tiszta, mit szerettél volna. Azt nem fogtam fel eredetileg, hogy mit is szeretnél szebbé tenni, nem is beszélve arról, hogy amikor beszéltünk róla, még a .bind() sem ugrott be, pedig elég kézenfekvő, és még az itteni kódodban is szerepel...
Szerintem a legrövidebben úgy lehetne jól megfogalmazni, hogy az adott elemre vonatkozó event handler átadásának pillanatában szeretnél már vonatkozó paramétereket is átpasszolni, az event handlert pedig teljesen általánosan "megfogalmazni", hogy ne legyen tele ronda if-else-ekkel vagy switch-case-ekkel pl. az event.targettől függően.
Szóval sorry, ez most nem az én napom.(#4092) Karma :
"nem értem az ellenhurrogást, hiszen a this bepasszolása az eseménykezelőnek igencsak alapvető dolog"
Jogos, és jó is, hogy beírtad a megoldást; de szerintem jelen esetben pont nem csak a this bepasszolása a lényeg, hanem az egyéb paramétereké (végül is elvileg ez volt a kérdés, nem az, hogy hogy tudja használni a this-t), hiszen a this magában az event handlerben is "elérhető" lenne. Úgy értem, pont a this miatt a .bind() használatának előnye nem pont ennél a feladatnál kristályosodik ki igazán, mert a this működik az ebben a példában szereplő btnHandlerWithoutParams fv.-nél is: http://jsfiddle.net/8LCcR/2/ -
Jim-Y
veterán
válasz
Sk8erPeter #4087 üzenetére
Story mode on
Adott a feladat, vannak egy generált oldalon gombok, a fajta gombból is >= 0 darab, b fajta gombból is >=0 de általában több darab. Ezen kívül még van pár elem amire listenert kell kötni mert azok is csinálnak valamit. Maga az action nagyon egyszerű, a és b gombok esetén is csak el kell navigálni egy adott url-re, de az url-ben változnak a query paraméterek. Ugye ebben semmi nehéz sincs, meg is csináltam gyorsan, kb ilyeneket írtam:
var aButtons = document.getElementsByClassName('a'),
bButtons = document.getElementsByClassName('b'),
cButton = document.getElementById('c'),
dDropdown = document.getElementById('d');
for(var i = 0; i < aButtons.length; ++i){
aButtons[i].addEventListener('click', function(){
var queryParam = this.getAttribute("data-myImportantValue");
window.document.location.href = 'localhost:myport/myservice/..stb/myFun&query=' + queryParam;
return false;
});
}
.. bButtons-re is..
...cButton-re is stb..Mivel gyorsan megvolt, gondoltam akkor megpróbálom szebben megírni, arra gondoltam, hogy például az szebb lenne, meg memória (bár itt annyira mindegy...) szempontjából is jobb lenne, ha a function() { ... } helyett lenne egy eventHandler függvényem amit az összesben tudnék használni. És az lenne még jó, gondoltam, ha a 'localhost:myport/myservice/..stb/myFun' részt, mivel myFun minden esetben más aButton-ök esetén myFunc, bButton-ok esetén myFunc2 stb... ha ezt megadhatnám a handler paraméterében, valamint arra gondoltam, hogy a queryParamétereket &query= is egy paraméterben adnám át a handler függvénynek.
Azt nem tudtam, hogy ezt így nem lehet, sőt, igazából lehet.
Megnéztem az addActionListener Chrome beli implementációját, máshol is tuti így van, ott van egy listeners tömb, amibe a listener függvény objektumokat teszik. Ezáltal később lehet mondani removeListenert amikor csak simán kiveszik a listener függvényobj-ot a tömbből. Ezért ha ezt írom, az nem jó.
addEventListener('click', eventHandler(param1, param2));
Mert ebben az esetben a () miatt rögtön meg is hívom a függvényt ami ugye nem jó, a tömbbe se tudja a böngésző így betenni stb...
Mentem tovább, mi lenne, ha a paramétereket bindolnám az objekthez, így nem kéne a függvényt rögtön meghívni, a böngésző el tudná tárolni a listeners tömbben:
addEventListener('click', eventHandler.bind(thisArg, param1, param2));
Ez jobb, itt a két paraméter a függvényhez lett bindolva, ezeket elérem egy ilyen fügvénnyel utána:
function eventHandler(param1, param2) { }
De ezzel meg az a gond, hogy a thisArg-nak nem tudtam átadni se az event-et, se a this-t. Tehát az eventListener-ben utána nem érem el a aButtons objektet, szóval ez se jó így.
Na és valahol itt írtam be a topikba, hogy hátha valahogy meg lehet úgy csinálni, hogy az eventHandler függvénynek átadom a aButtons(i) referenciát mint thisArg, valamint a saját paramétereimet, és akkor írhattam volna ilyeneket:
for(var i = 0; i < aButtons.length; ++i){
aButtons[i].addEventListener('click', eventHandler(this, 'localhost:myport/myservice/..stb/myFun', {
someId: "data-myImportantValue",
somOtherId: "data-otherImportantId"
}));
}
for(var i = 0; i < bButtons.length; ++i){
bButtons[i].addEventListener('click', eventHandler(this, 'localhost:myport/myservice/..stb/myFun2', {
someStuff: "akarmi"
}));
}
function eventHandler(baseUrl, queryParams) {
var queryString = processParams(queryParams);
// queryString:
// &someId=<this.getAttribute("data-myImportantValue")>&someOtherId=<this.getAttribute("data-otherImportantId")>
window.document.location.href = baseUrl + queryString;
}Szóval semmi komoly, csak szebben/jobban/máshogy akartam megcsinálni, ennyi
Megj: PH random italic tageket tesz a hsz-be, wtf? Nem győzöm törölni őket
Hát de ez mi? Nem tudom kitörölni a hsz-ből a dőlt bekezdéseket, mert visszteszi őket :/ Itt van amit nem sikerül szépen formáznom: pastebin
Karma: de, pont ezt, de a sokBtns eszembe se jutott ^^
-
Sk8erPeter
nagyúr
Nem értelek, itt már egy az egyben azt írtam le, mit tudsz csinálni.
"item.addEventListener('clck', csodalatosEventHandler -> na ennek akarok paramétert megadni. Ugyanis ezt a függvényt újrahasznosítanám később is."
Miért akarsz olyan módon csinálni valamit, amire nem való, vagy amit nem lehet vele?
https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener
target.addEventListener(type, listener[, useCapture]);
target.addEventListener(type, listener[, useCapture, wantsUntrusted ]); // Gecko/Mozilla only
Ez a fejléc, és kész.Azt nem fejtetted ki, mi a gondod azzal, hogy az event handlerben kezeled le, mi történjen a kattintás által célzott (e.target) elemmel?
Így szokás ezt elintézni, és ennyi. Hogy most az abban történteket egy erre külön kitalált függvényben intézed-e még el, vagy aztán azonbelül hány függvényt/metódust hívogatsz, az tervezői döntés.
Azt nem mesélted el még, mi az alapfeladat, ami miatt zavar, hogy az addEventListenernek nem tudsz átadni olyan paramétereket, amit az nem enged...Egyébként ilyen alapon saját addEventListenert is definiálhatsz valami más néven, aminek beadhatsz különböző paramétereket, wrappert építve az alap addEventListener köré, aztán egyedileg kezelve, csak nem sok értelmét látom.
Ja, még egy fontos dolog: használhatod nyugodtan a data-attribútumokat, így lényegében "be is drótozhatsz" bizonyos tulajdonságokat az elembe, amik konkrétan arra vonatkoznak, ezeket meg lekérheted a JavaScript-kódból. Ez is lehet egyfajta "paraméterezés", és akkor lehet, hogy megkerülted a problémát, mert nem kell óriási switch-case. (Ne brutálsok if-else-t írjál, ha már, erre találták ki a switch-case-t.
De előbb gondold végig, vagy írd le ide, mit szeretnél konkrétan.)
-
Jim-Y
veterán
válasz
martonx #4085 üzenetére
De ez még mindig nem az amit szeretnék :/
[link] Lehet, hogy nem is lehet azt megcsinálni ...
Csak mert ez az utóbbi sem egy szép megoldás.. annyival jobb, hogy nem halmozom az anonim függvényeket.
Minden esetre, már ez is jobb mintha helyben kezelném le az eseményt, szóval half-win, de azért érdekelne, hogy az alpfeltevést meg lehet-e valósítani
-
Jim-Y
veterán
válasz
Sk8erPeter #4083 üzenetére
Na igen ez így tiszta, pont ezt akarom ezért született meg a kérdés, mert egy bizonyos class összes elemére akarok handlert rakni, tehát cikluson belül vagyok, csak az olvashatóság miatt hagytam ki. És pont azért ez a kérdés, mert nem akarom anonim függvényeket használni, mert az mindig létrehozna egy új függvény objektumot. Amit mivel ciklusban vagyok, szeretnék elkerülni.
Az lenne a lényeg, hogy a handlernek, amit a click eseményre kötök, tudjak saját paramétereket átadni.
item.addEventListener('clck', csodalatosEventHandler -> na ennek akarok paramétert megadni. Ugyanis ezt a függvényt újrahasznosítanám később is.
Készítettem egy példát:
Vagy akkor úgy lehet csak, ahogy írtad is? : [link] Ez azért nem tetszik, mert ha más paraméterrel akarnám meghívni az evHandlert akkor annyiszor kéne egy új forwarder :/
-
Sk8erPeter
nagyúr
válasz
Sk8erPeter #4082 üzenetére
ja, itt amúgy nyilván nálad a
buttons[i].addEventListener('click', csodalatosEventHandler);
sor valami for cikluson belül lenne (kiindulva a buttons[i] kódrészletedből), a többi pedig természetesen azonkívül, csak a pontosság kedvéért -
Sk8erPeter
nagyúr
Mivel neked a this.akarmi kell, miért nem magában az event handlerben passzolod át a szükséges paramétereket a goTo() akármilyen függvénynek?
Amúgy kerülendő, hogy egy ciklusban definiálsz anonim függvényként event handlereket, inkább legyen egy "közös" event handlered, amire kb. függvénypointert adsz át:function tokMindegy(valamiObject, blablaParams) {
// ...
}
function csodalatosEventHandler(e) {
tokMindegy(e.target, "bizony");
// ...
}
buttons[i].addEventListener('click', csodalatosEventHandler); -
Jim-Y
veterán
Sziasztok. Hogy tudok olyan addEventListener-t írni, ahol a handler függvénybe paraméterben meg tudom adni a this-t, illetve még a saját paramétereimet?
Így próbálkoztam:
buttons[i].addEventListener('click', goTo.bind( this, myOtherParams), false );
Ugye ha így írtam volna:
buttons[i].addEventListener('click',function() {
this.akarmi; // ez itt jó, itt a this az éppen aktuális button obj.
});A fentivel az a gond, hogy a goTo fv-ben kiiratva a this-t, undefined-ot kapok :/
-
norby10
csendes tag
Helló!
Lenne egy kis gondom, elkezdtem készíteni egy weboldalt a dreamweaverben es nem sikerül megcsinálnom azt ,hogy mikor zoomolok az egerbol az oldalra akkor ne feher legyen a háttér körüli rész hanem automatikusan átméretezze a background imaget és töltse ki a megmaradt helyet.Ehhez szerintem javascript kell csak még sehol sem kaptam meg. -
martonx
veterán
válasz
fordfairlane #4075 üzenetére
Ez is jogos, ezért nem használok Notepad szintű IDE-ket. Jó lenne a PH-t felokosítani némi kód intellisense-el
-
martonx
veterán
válasz
trisztan94 #4072 üzenetére
Jogos.
-
trisztan94
őstag
válasz
Sk8erPeter #4073 üzenetére
-
Sk8erPeter
nagyúr
válasz
trisztan94 #4072 üzenetére
Ha jogos dolgokért szólsz be, akkor azzal semmi gond nincs.
Pl. jelen esetben jogos a megjegyzésed.Egyébként pont ezért rakattam ezt az összefoglalóba:
http://www.slideshare.net/fgalassi/refactoring-to-unobtrusive-javascript -
trisztan94
őstag
válasz
martonx #4071 üzenetére
A legenda úgy tartja, hogy csúnya dolog a presentation logicba presentation-t rakni. Ergo JS-be csúnya explicit stílusokat írni, és nem illik.
Inkább cserélgessen osztályokat.Most kezdtem elég komolyan a szép js-css-html kódok írásával foglalkozni, készüljetek fel, hogy be fogok szólni mindenért!
-
Jim-Y
veterán
válasz
Sk8erPeter #4068 üzenetére
Na asszem megvan a bibi, én egy IIFE-ben írtam ezeket, ami ugye egy új environment-et (scope) deklarált aminek már nem volt hasClass-a, ezért is jött az error
Amúgy azért jött elő, mert kellett a hasClass, addClass, removeClass, de nyílván csak ezek miatt nem szedek egy jquery-t, azt pedig tudtam, hogy ide már többször is be lett linkelve.
Még mélyebb menve, pedig azért kellettek, mert egy elementet kellett eltüntetni, js-be pedig nem írunk css-t mint az az összefoglalóban is le vagyon írva, úgyhogy marad a class bővítés ^^
-
Sk8erPeter
nagyúr
Nem az én kódom, mivel mint látható volt, az openjs.com-ról szedtem, de egyébként ez a kód működőképes, ami ott van.
Gondold át jobban: a this jelen esetben az egész window objektumra vonatkozik. Mivel a függvény így a this része, a this.hasClass() működik is...
Azt is használhatnád - bár elég undormány lenne - hogy this.alert('akarmi'), és működne.
Hogy sikerült ezt így 124123 év múltán megtalálni?
-
Jim-Y
veterán
válasz
Sk8erPeter #3566 üzenetére
Napi régész
Ezt itt elrontottad szerintem:
function addClass(ele, cls) {
if (!this.hasClass(ele, cls)) ele.className += " " + cls;
}A this az nem jó..
function addClass(ele, cls) {
if (!hasClass(ele, cls)) ele.className += " " + cls;
} -
martonx
veterán
válasz
MrSealRD #4064 üzenetére
"Itt nálunk az a legnagyobb félelem, hogy ha az ügyfél kitalálja, hogy "jó, jó ez a táblázat, de kéne ide még egy gomb, meg oda egy címke..." stb. Akkor lehetőleg tudjunk kezdeni valamit az igényekkel."
Bármit is választotok, egy ilyen feladat megoldása triviális (na jó angularral, közel sem lesz triviális az első pár hónapban, de utána jó lesz az is).
A javascript kezdőségeteket látva, én továbbra is hagynám a francba a helyetekbe az SPA-s megközelítést, és KendoUI-al, vagy valami hasonszőrű cuccal oldanám meg a feladatot. A kérdéseidet elnézve annak is örülni fogtok, ha az első AJAX lekérést megírjátok, nemhogy kliens oldali Dependency Injection-nel, meg closure-ökkel, meg típustalansággal, meg az eddigiektől tökéletesen eltérő megközelítésekkel foglalkozzatok.
-
-
MrSealRD
veterán
Köszi mindkettőtöknek.
A kérdés óta kicsit belemászta a google rengetegébe... Hát van itt egy-két dolog amit meg kell nézni...
Itt nálunk az a legnagyobb félelem, hogy ha az ügyfél kitalálja, hogy "jó, jó ez a táblázat, de kéne ide még egy gomb, meg oda egy címke..." stb. Akkor lehetőleg tudjunk kezdeni valamit az igényekkel.Most jutott eszembe, hogy van még egy pont. AJAX hívás a szerver felé...web service kiszolgálja. Na igen, de itt milyen objektumok fognak utazni?! Hogy lehet egy Java objektumot áttuszkolni, hogy a kliens oldali (akármi) is megértse?
-
martonx
veterán
CRM rendszert csináltunk legutóbb knockout, jquery, bootstrap kombinációval. Szerintem nagyon könnyen használható, nagyon effektív kombináció. Angulart is használom napi szinten, szintén komoly projektben. Valahogy nem estem hasra tőle. Nagyon sokat tud, nagyon szép kliens oldali architektúrákat lehet rá felhúzni, ugyanakkor bűn gyengén dokumentált, több hónap távlatából se mérnem kijelenteni, hogy értek hozzá. Plusz nekem teljesítményben a ko sokkal erősebbnek tűnik. Én a helyedben knockoutjs (pontosabban durandaljs ha már almát almával) és angularjs között ingadoznék. Látva a kezdőséged, egyértelműen a knockout-ot javasolnám.
Ugyanakkor ezek a frameworkök SPA-khoz előnyösek, közel sem biztos, hogy tényleg ez kell Nektek. Lehet, hogy egy kendoui-al sokkal könnyebben elérhetnétek ugyanazt.Karma, ez nem neked akart válasz lenni, hanem stuszinak. Bocs.
-
Karma
félisten
válasz
MrSealRD #4061 üzenetére
Egyetértek martonxszel abban, hogy a jQuery nem illik a sorba – az csak az alapja lehet egyrészt a JS-sel felturbózott weboldalaknak, másrészt bonyolultabb libek alatt hálózati/DOM manipulációs rétegnek használható, de önmagában kevés.
Az Ext.JS-nek korábbi verziójával dolgoztam, hát az erősen kitekert volt. Hozzá lehetett szokni, de azért...
A felsoroltakból az Angular tanulmányozását javasolnám, de bevenném még a Backbone.js-t is. Ezzel is van konkrét tapasztalatom, gyorsan tanulható és be is vált.Elvben a Knockout is igen erős szerszám a UI összeállításához.
CSS fronton meg (ez mégiscsak egy külön témakör) a Twitter Bootstrap szerintem mindenképp megér két misét.
-
MrSealRD
veterán
válasz
martonx #4060 üzenetére
Azért van ez, mert egyiket sem ismerem. Nem tudom melyik mi fán terem...A választás pedig nem a felhasználás, hanem a tanulási idő lerövidítése miatt kell...
A cél webes vékony kliens készítése. A fókusz a HTML5,JS,CSS2/3 technológiákon van. Ehhez kellene egy olyan "tool" ami támogatja ezt és nem kitekert elméletek mentén valósítottak meg benne dolgokat.
Vállalatirányítási rendszer kliensoldala lesz rá építve....Eddig a kulcs buktatót a custom control-ok készítésében látjuk...
-
martonx
veterán
válasz
MrSealRD #4059 üzenetére
Előre bocsátom, hogy az Ext.JS-t nem használtam.
De az ugye megvan, hogy egy jquery-t AngularJs-el összehasonlítani, még csak nem is almát a körtével, hanem almafát a körtével összehasonlítás esete.
Ráadásul az AngularJs nem zárja ki a jquery használatát, szóval nem is értem, miért kell választani?
Ráadásul semmi konkrétumot nem írtál ,hogy mire akarod használni?
Ennyi infó alapján, aki állást foglal neked ebben, az biztosan nem tudja, hogy miről beszél -
MrSealRD
veterán
Üdv,
Keretrendszerekkel kapcsolatba kérnék egy kis segítséget.
jQuery vs Ext.JS vs AngularJs a három versenyző. Mindhármat felszedni sok. Kellene választani egyet ami jó...Persze tudom ez relatív. Fontos lenne, hogy gyorsan meg lehessen tanulni, ne legyenek benne fondorlatos trükkök. Custom control mindig is egy problémás terület, de ha egy mód van rá akkor segítse az ilyen jellegű munkát és ne kelljen féllábon ugrálni bolygóegyüttálláskor, hogy működőképes legyen benne valami.
Amolyna pro/kontra érvelés érdekelne, akinek van benne komolyabb tapasztalata.
Előre is kösz.
-
Zedz
addikt
válasz
Sk8erPeter #4057 üzenetére
Az hülyeség volt, köszönöm a segítséget.
-
Sk8erPeter
nagyúr
-
Zedz
addikt
válasz
Sk8erPeter #4055 üzenetére
Szóval miért kell az event oda? Menne nélküle is nem?
-
Zedz
addikt
válasz
Sk8erPeter #4053 üzenetére
Ezt a paramétert a DOM-ból szedi ki?
-
Sk8erPeter
nagyúr
A click eseményt - azért lett "e", mert így rövidítettem az "event" szót, de átnevezhetnéd azt a paramétert "kiskutyafule" változónévre is. Érdemes ezt is kiíratnod konzolra - csak tesztelés erejéig, ilyenek ne maradjanak benne az éles kódban!! -, hogy lásd, mi van benne:
console.log('event: ', e);
Hasznos tud lenni, ha ismered a tartalmát: le tudod kérni például a klikkelés koordinátáit, a célzott elemet (a jelen példában e.target, ennek aztán további attribútumai vannak, mint pl. ha lenne id-je az adott elemnek, akkor e.target.id, a "name" attribútum az e.target.name segítségével, a "value" pedig az e.target.value-val érhető el, le tudod kérni a szülőelemet az e.target.parentNode-dal, és így tovább), és egyebeket. -
Zedz
addikt
válasz
Sk8erPeter #4051 üzenetére
Hmm értem. Annyit még szeretnék kérdezni, hogy:
function elementsNamedXClickHandler(e)
Itt az e, mint paraméter mit jelöl?
-
Sk8erPeter
nagyúr
Pedig kell az index
Érdemes használnod a debuggoláshoz hasznos gyorseszközöket, nyisd meg a használt böngésző fejlesztőpaneljét (Ctrl+Shift+I vagy F12), kattints a Console fülre, és írasd ki az aktuális elemet, hogy megtudd, mi van benne, például:
console.log("Documents named 'x': ", document.getElementsByName("x"));
-
Zedz
addikt
Sziasztok,
El akadtam a JS tanulásban és segítséget szeretnék kérni. A gond a document.getElementsByName(...)-mel van.
Egyszerűen nem akar sikerülni.
Példa: link
Ha oda írom az indexet, pl [0], akkor az első gomb értékét kiírja az alert ablakba. De én olyat szeretnék, hogy mindig azt írja ki amire kattintok. Tutorialokban mindenhol index nélkül használják, de nekem egyszerűen nem akarja az igazságot. Miért?
-
Sk8erPeter
nagyúr
válasz
trisztan94 #4047 üzenetére
Nem akarok már megint köcsög lenni, nem rohadékságból kérdezem, bár tudom, hogy én vagyok a beszólogatós szemét, de miért készítesz tutorialt olyan témáról, ahol még ingoványos talajon állsz? Bár megértem, hogy örülsz, ha kapsz pozitív feedbacket, de én nem mernék addig készíteni tutorialt, amíg nem tanultam meg mondjuk az alapvető webfejlesztést elősegítő eszközök használatát, az olyanokét, mint a webfejlesztő panel (Chrome Developer Tools (Ctrl+Shift+I vagy F12), Firefox beépítettje (Ctrl+Shift+I) vagy Firebug (extension-telepítés után F12), stb.), hogy kiderítsem, adott esetben mi lehet a gond.
Na, de ez volt az OFF része, válaszolok is a kérdésre.
Lenyitod az említett fejlesztői paneleket, és megtudod a választ, a linkre kattintás utáni állapotokat mutatom, mindenhol bekereteztem a lényeget:Chrome:
Network fül:
Console:
"Refused to display 'https://www.google.hu/' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'."x-frame-options:SAMEORIGIN
Firefox:
"Load denied by X-Frame-Options: https://www.google.hu/ does not permit cross-origin framing."====
Átírod a http://google.hu-t http://example.com-ra, és BANG:
http://jsfiddle.net/aA8d9/2/VAGY kipróbálod ezt a saját kis tesztkörnyezetedben, ahol nem egy frame-be töltöd be, és megint csak BANG, váó, működik.
A miértek a hibaüzenetekből kideríthetők, de kérdezz, ha nem tiszta.
Javasolt olvasnivaló pl.:
https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options -
fordfairlane
veterán
válasz
trisztan94 #4047 üzenetére
Most vágom az egyik tutorial vidim, ott viszont egy <a>-ra e.defaultPrevented-et használtam, és valamiért pontosan ugyanaz történik, mintha e.preventDefault() lenne használva, tehát nem fut le az alapértelmezett esemény.
Nálam Firefoxban lefut, tehát nem ugyanaz történik. Nem is történhet ugyanaz.
-
trisztan94
őstag
Múltkor - hibásan - mondtam azt, hogy az e.preventDefault() helyett e.defaultPrevented-et kellene használni. Persze azóta már fel lettem világosítva, hogy hülye vagyok, rosszul emlékeztem valamire, ezt tudom.
Most vágom az egyik tutorial vidim, ott viszont egy <a>-ra e.defaultPrevented-et használtam, és valamiért pontosan ugyanaz történik, mintha e.preventDefault() lenne használva, tehát nem fut le az alapértelmezett esemény.
Na de miért? MDN szerint az e.defaultPrevented egy boolean értéket ad vissza arról, hogy az alapértelmezett esemény lefutása meg lett-e gátolva.
Nem lehet, hogy azzal, hogy azt hívtam meg, úgy interpretálta a böngésző (Chrome), mintha return false-t írtam volna? Vagy miért van ez? Console nem dob rá hibát, sem firebug.
-
martonx
veterán
válasz
trisztan94 #4042 üzenetére
Kevered a windows 8-at a windows Phone 8-al.
-
Karma
félisten
válasz
trisztan94 #4042 üzenetére
Mi? Van WP8.1 SDK RC?
-
Karma
félisten
Huh, most nézem, hogy a közepe kicsit zanzás lett. Mobilon írtam, és nem vettem észre
Szóval az első bekezdés vége ez akart lenni:
Platformonként változik, hogy milyen csatornán keresztül tud a natív kód a JS felé szólni. WP-n mint láthattuk az InvokeScript metódus jó erre; Androidon és klasszikusan iOS-en(*) a "javascript:"-es sémára navigálás működött (ezzel példáloztam korábban).
A szkriptek visszafelé is kommunikálhatnak egyébként, WP-n egy globális függvényt hívhat meg a JS; iOS-en az aktuális URL változását lehet figyelni; Androidon meg a legerősebb, mert közvetlenül ki tud hívni Java metódusokra – persze csak amiket a natív alkalmazás előre kiajánl a JS bridge-nek.
(*): iOS7-en bejött a JavaScriptCore, ami elméletileg közvetlen összeköttetés a JS és Obj-C világ között. De erről nem tudok semmit.
-
trisztan94
őstag
válasz
Sk8erPeter #4035 üzenetére
Valóban
A minifikált jQuery-re írta azt, hogy A getPreventDefault() használata elavult. Használja helyette a defaultPrevented-et.
Ezt kevertem a preventDefault()-al
-
Karma
félisten
Alapvetően jól képzelted el, erről van szó: adott egy többé-kevésbé komplex webalkalmazás, lokálisan vagy online megnyitva, amit egy natív mobilalkalmazás futtat egy beágyazott böngészőben. Platformonként változik, hogy milyen csatornán keresztül (ld. az előbbi InvokeScript WP-n, navigációt Androidon és iOS-en), de kommunikálhat a szkript is kifelé (ez pl. Androidon a legerősebb, mert közvetlenül ki tud hívni Java metódusokra).
Lehet hackelni is, mint az előző kérdésvonulatban, de ha az ember nulláról épít hibridet, jobban jár ha megtervezi magának az interfészt előre
Én egy olyan alkalmazásban használtam ilyen architektúrát, ahol a backenden generált tetszőleges tartalmú kérdőíveket (mini webalkalmazásokat) lehet generálni, a kliensek letöltik ezeket, és utána a felhasználók offline kitölthetik újra meg újra. A JS interfész ott jön a képbe, hogy a kitöltés eredményét ezen keresztül szivárog át a Java kódhoz, ami a tárolást és feltöltést kezeli.
-
leximester
tag
Megoldottam a dolgot, lehet csúnya megoldás de hatásos, függvénybe tettem a restart gomb click eventet, és ezt a függvényt hívom meg a c# kódból. Köszönöm az eddigi segítséget!
-
Sk8erPeter
nagyúr
válasz
trisztan94 #4029 üzenetére
Hogy micsoda?
Az event.preventDefault() NEM deprecated, hogy lenne már az?!
https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault#Notes
meg
http://api.jquery.com/event.preventdefault/Szerintem te ismét kevered a szezont a fazonnal:
"event.returnValue is deprecated. Please use the standard event.preventDefault() instead"
http://stackoverflow.com/questions/20045162/event-returnvalue-is-deprecated-please-use-the-standard-event-preventdefault
https://github.com/angular/angular.js/issues/4557
https://drupal.org/node/2170221-->
http://bugs.jquery.com/ticket/14282
http://bugs.jquery.com/ticket/14320Nagyon nem ugyanaz, hogy az event.returnValue deprecated, vagy a másik...
Ráadásul még az sem stimmel, hogy a Firebug dobná, mert a Chrome konzolja írja ki ezt, Firebug nem sír érte. (Kipróbáltam, mert pont erre emlékeztem.)
Ne vezessük félre a népet téves információval, mielőtt utánanéznénk, légyszi. -
Jim-Y
veterán
Erről esetleg tudnál írni 1-2 sort, hogy hogy kell elképzelni? Van egy böngészőben futó alkalmazás, mint most a 2048, és az én C#/Java/akármi kódom közbe tud szólni, meg tudja hívni az alkalmazás egyes függvényeit?
Én eddig sajnos csak egy !JS nyelvben csináltam olyat, hogy natív javascript kódot futtattam, így nincs ebben nagy tapasztalatom :/
-
Karma
félisten
-
Jim-Y
veterán
válasz
leximester #4028 üzenetére
És miért szórakozol C#-al ahelyett, hogy ki-chekcoutolnád a projektet, és amennyiben szabad, továbbfejlesztenéd magadnak az eddigi kódot? Főleg, hogy annyival nem tudod megoldani a fejlesztést, hogy meghívogatsz pár függvényt és kész. Vannak belső állapotai a függvényeknek amin az egész alkalmazás áll, vagy bukik. Azzal is törődni kell.
trisztan: nem az ő kódjában van az preventDefault.
-
Karma
félisten
válasz
leximester #4028 üzenetére
Mondjuk stringből Urit csinálni nem nagy kaland, ellenben ja, amit írtam a "javascript:" előtag nélkül az InvokeScripttel tényleg jobb.
-
trisztan94
őstag
válasz
leximester #4025 üzenetére
Csak halkan, mellékesen megjegyzem, hogy az event.preventDefault() _elvileg_ deprecated, event.defaultPrevented;-et kell használni (nincsenek zárójelek). Legalábbis a firebug nekem mindig ezért nyavalyog.
-
Karma
félisten
válasz
leximester #4025 üzenetére
Ja most látom, ez már túl lett lépve, bocsi
De azért nem törlöm ki.---
Az a helyzet, hogy a WP WebBrowser felől csak olyan JavaScript dolgokat tudsz meghívni, amik globálisan elérhetőek. A valami függvényed egy globális függvény, így kapásból elérhető; viszont a kérdéses InputManageres történet valószínűleg el van fedve az ilyen behívások elől.
Ez most hack, de például csinálhatnál az oldalad végénél egy globális példányt ebből, és azon meghívhatod a metódust.
<script type="text/javascript">
var globalInputManager = new KeyboardInputManager();
</script>És utána az appodban nyomsz egy ilyet:
webBrowser.Navigate("javascript:globalInputManager.restart()");
Akkor talán mennie kéne.
---
Na visszatérve az új problémára, az egyszerűbbik megoldás az inputmanager meghackelése lenne (ha az event undefined, akkor ne akarjon preventDefaultot hívni), illetve C# oldalon is lehet hákolni.
webBrowser.Navigate("javascript:globalInputManager.restart(document.createEvent('hack'))");
-
Jim-Y
veterán
válasz
leximester #4025 üzenetére
az event az egy click event lesz a restart gombon. Nálad azért undefined ,mert nyílván nem adtál meg a restart függvénynek egy click event objektumot mint bemenő paramétert.
Próbáld ki, hogy ott ahol restartot hívnál, ott írj egy
<keyboardInputManager>.emit("restart"); -ot. -
leximester
tag
válasz
Sk8erPeter #4024 üzenetére
Szerkesztettem már az előző hozzászólásom csak jött egy áramszünet...
Szóval, az szépen megy hogy javascriptből hívjak meg C#-s függvényt stb, vissza fele is megy, amennyiben ilyen a függvény a js-ben:
function valami() {
alert("masvalami");
}Ahogy sikerült kivennem a kódból, a keyboard_input_manager.js-ben lévő
KeyboardInputManager.prototype.restart = function (event) {
event.preventDefault();
this.emit("restart");
};függvény felelős az újraindításért. Ezt szeretném c-ből meghívni. És ha ezzel megcsinálom a fentebb említett módszert, akkor nem működik. Remélem így már érthető a gondom.
-
Sk8erPeter
nagyúr
válasz
leximester #4021 üzenetére
Pedig jó az, amit Jim-Y írt.
Én sem értem sajnos ennyiből, mi a gond, tényleg látni kéne a kódodat, hogy pontosan mi vérzik el, és hol.
De ha jól értem, valami olyasmi, hogy callback-ként szeretnéd meghívni a .restart() metódust, és az nem megy. Vagy nem erre gondoltál?szerk.:
(#4023) : ebből még mindig nem tudtuk meg, konkrétan, pontosan mi a baj, hol hasal el a dolog, és hogyan csináltad C#-ban, hogyan JavaScriptben.
Ha a C#-kódban van a gond: C# programozás topic. -
Jim-Y
veterán
válasz
leximester #4021 üzenetére
Igazabol egyszerubb lenne ha bemasolnad az eredeti kodot. Meg ha leirnad hogy mit szeretnel elerni es hogyan, az sem lenne utolso szempont :-)
-
Jim-Y
veterán
válasz
leximester #4019 üzenetére
Ha van egy InputManager objektumod, akkor azon a restart metódust meghívva tudod elérni ezt a függvényt.
Magyarázat:
Tehát javascriptben ha egy tömbön meghívsz egy pl indexOf() metódust ( [1,2,3].indexOf(3); ), az így lett implementálva:Array.prototype.indexOf = function(elem) { ... }
megj: a [] egy shorthand a var arr = new Array(); -re.
Megoldás:
Kell egy InputManager objektum:var inputManagerObject = new InputManager();
majd
inputManagerObject.restart(); // alert teszt
Hogy hogyan delegálj egy ilyen objektumot C#-ba abban nem tudok segíteni, nézz utána
-
leximester
tag
Sziasztok, nem értek a javascripthez, ezért lenne szükségem egy kis segítségre. Adott egy html fájl és sok .js, az egyik .js-ben van egy ilyen függvény:InputManager.prototype.restart = function (event) {
alert("teszt");
};
Arra lenne szükségem hogy ezt a függvényt megtudjam hívni C#-ból(windows phone-s app), viszont ehhez tudnom kéne a függvény nevét, próbáltam utánajárni a dolgoknak, de eddig nem jártam sikerrel, azt próbáltam hogy a function után beírtam egy nevet, de nem lett jó. Előre is köszi -
-
Fr3eWar
őstag
válasz
Sk8erPeter #4016 üzenetére
Szépen tudod cifrázni a dolgokat.
De az első hozzászólásom szerintem egyértelmű, de tényleg lehetett volna egyértelműbb, ha a kettőspont helyett kérdőjelet tettem volna.
"Van akinek betölt ez az oldal:"
De az átnevezés lehet hogy lendítene a magamfajta noob-ok eltántorításán.
-
Sk8erPeter
nagyúr
válasz
Fr3eWar #4015 üzenetére
És mindezt nekem magamtól kellett volna kitalálnom, hogy mi a célod, hogy közöd nincs a weboldalhoz, hogy nem szakmai kérdésed van, és amúgy is micsoda szemétláda vagyok, hogy szóvá teszem, hogy semmi köze a topichoz annak, amit kérdezel. OK, vállalom.
Sorry, túl sokan tévednek el.
De adtál legalább egy tippet: ezt a topicot is át kell nevezni JavaScript topicról JavaScript-programozásra, mert itt konkrétan arról van szó.És akkor félreértés sincs.
-
Fr3eWar
őstag
Pontosan!
csak használni szerettük volna az oldalt.
(#4013) Sk8erPete :
Közöm nincs a java-hoz semmilyen irányból.
Ezt találtam a keresőbe java szót beírva. És mivel a másik topic címe java programozás volt, így azt magamban kilőttem, mert nem érdekel a java programozás. És nem tudom mi a különbség a java script meg más között.De úgy sikerült megoldani, hogy a java control panelon, hozzáadtam az oldal címeit az engedélyezett oldalakhoz. És a biztonságot medium-ra állítottam.
-
CSorBA
őstag
Szerintem Ő felhasználó, és használni szeretné
Ezért kérdezi itt, hogy vajon a hiba nála van-e vagy sem.
-
Sk8erPeter
nagyúr
válasz
Fr3eWar #4009 üzenetére
Még jó, hogy az összefoglalóba direkt belerakattam, hogy a JavaScript NEM ugyanaz, mint a Java...
Ezek szerint nem lett túl hatékony. Van Java topic.
Nem értem, minek kell 2014-ben Java appletekkel kinevettetnie magát bármilyen fejlesztőnek, de gondolom ez valami legacy weboldal, amit megörököltél. -
Fr3eWar
őstag
Sziasztok, kezdek a falnak menni.
Bocs ha nem a megfelelő topic de nem találtam jobbat.
Van akinek betölt ez az oldal:Még a firefox verziót nem próbáltam de Chrome-ban meg IE11 alatt próbálkozok, ne tölt be. Raktam fel 64bites java-t 32-es 7es java-t, aztán 32-es 6os javat. Minddel ugyanaz hiba nem engedélyezett. Mikor be van jelölve chrome alatt is hogy mindig fut.
-
Jim-Y
veterán
-
r4z
nagyúr
Érthető
Egy dolgot mondj még meg, kérlek: miért lehet az, hogy hiába másolom be a kódot karakterről karakterre, és még a JSON objektumot is hozzá igazítom. hogy pont olyan legyen, mint nálad (és ami amúgy valid), nem hajlandó működni. JSFiddle-ön is működik.
Két dolgot csináltam vele összesen:
- belefoglaltam egy functionbe
- a function első sorában megadtam neki a változót, ami tartalmazza a JSON objektumot.A return product.Tipus.sameUntil(manufacturer); sornál viszont a Chrome konzolja Uncaught TypeErrror: cannot call method 'sameUntil' of undefined hibát dob.
-
Sk8erPeter
nagyúr
"Mivel szedted így rendbe a kódot?"
Én ezt szoktam ilyen célra használni a JSFiddle TidyUpján kívül: http://jsbeautifier.org/ -
Karma
félisten
Ez a három szakasz a lényeg:
var manufacturers = _.groupBy(inputdata, function (product) {
return product.Gyarto;
});Azaz magyarra fordítva az underscore groupBy függvényt: "csoportosítsd az inputdata tömb elemeit a Gyarto property értéke alapján". Ezután a manufacturers egy olyan objektum, amiben a kulcsok a gyártók, az értékek pedig az oda tartozó termékek listája.
var manufacturerPrefixLengths = _.map(manufacturers, function (products, manufacturer) {
return {
manufacturer: manufacturer,
prefix: _.min(products.map(function (product) {
return product.Tipus.sameUntil(manufacturer);
}))
};
});Itt van az összehasonlítás meghívva. A map függvény veszi egy lista vagy objektum elemeit, ráhív egy függvényt egyesével mindre, az eredményeket pedig egy új listába fűzi össze. Más szóval transzformálja a listát.
Magyarul: "Minden gyártó-terméklista párt képezz le egy olyan objektumra, ami tartalmazza a gyártó nevét (manufacturer kulccsal), és az egyezések minimumát (prefix kulccsal)." A min függvény visszaadja egy lista minimumát.
A terméklistából prefixhosszlistát meg egy belső map képez, ami minden terméket leképez a gyártó nevével vett egyező szakasz hosszára.
var result = _.object(_.map(manufacturerPrefixLengths, function(x){return [x.manufacturer, x.prefix]}));
Ez az utolsó hívás pedig annyit tesz, hogy az előző lépésben generált listát, amiben a {manufacturer, prefix} objektumok voltak, egy valódi objektumra alakítja át.
-
r4z
nagyúr
Ó, ez így nagyon jó
Át is tudtam alakítani az XML-t JSON objektummá a HTML-en belül egy rejtett div-ben AJAX-szal, majd a div tartalmából létrehoztam a változót. Még egy kicsit tisztább is lett az adathalmaz.
Viszont amire nem jövök rá, hogy hogy indul be ez az egész összehasonlító folyamat
-
Karma
félisten
A teljes változatot a ctrlq Online Code Beautifierrel, a vágottat viszont nem ette meg, arra a JSFiddle TidyUp parancsát hívtam meg.
-
Sasos
senior tag
Mivel szedted így rendbe a kódot?
Console-ban van hibaüzenet, de pont ugyanazok ment a nem "piszkált" változattal. Így én nem tettem hozzá újabbat.
Ha rossz nyelvet is ad vissza a böngésző, a manuális állításnál akkor is minden nyelv esetén a beállított nyelvűnek azonosítja a böngésző az oldalt (kivétel a magyar).
Kipróbáltam telefonról, és németre átcsapva a nyelvet, szintén a default angol verziót nyitja be, ami nem is lenne gáz, mert ha csak az azonosítás lenne a gond átállítanám a default nyelvet magyarra. De az oldal nyelve továbbra is angol a böngésző(k) szerint.
Igen, minden próbálkozásnál gyalulom az előzményeket, cookie-kat, jelszavakat, űrlapelemeket.
Új hozzászólás Aktív témák
Hirdetés
- LEGO klub
- Kazy Computers - Fehérvár - Megbízható?
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- PlayStation 5
- Vezetékes FEJhallgatók
- sziku69: Fűzzük össze a szavakat :)
- NVIDIA GeForce RTX 5070 / 5070 Ti (GB205 / 203)
- Kerékpárosok, bringások ide!
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- BestBuy topik
- További aktív témák...
- ÁRGARANCIA!Épített KomPhone Ryzen 5 7600X 16/32/64GB RAM RTX 4060Ti 8GB GAMER PC termékbeszámítással
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- Xiaomi Redmi 12 Pro 5G 128GB, Kártyafüggetlen, 1 Év Garanciával
- 10% -tól elvihető.Országosan a legjobb BANKMENTES részletfizetési konstrukció! ACER PREDATOR HELIOS
- Apple iPhone 11 128GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged