Hirdetés
- Netfone
- Apple iPhone Air - almacsutka
- Kuo: Az Apple lenyelheti a dráguló memóriaárakat az iPhone 18-nál
- iPhone topik
- Okosóra és okoskiegészítő topik
- OnePlus 15 - van plusz energia
- Apple Watch Sport - ez is csak egy okosóra
- Rekord negyedévet zárt az Apple
- Szívós, szép és kitartó az új OnePlus óra
- Honor Magic8 Pro - bevált recept kölcsönvett hozzávalókkal
-
Mobilarena
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
-
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 ^^

Új hozzászólás Aktív témák
- Fujifilm X
- Netfone
- Mini PC
- Megkérdeztük az AI-t: milyen érzés, amikor megreguláznak?
- Miskolc és környéke adok-veszek-beszélgetek
- Apple iPhone Air - almacsutka
- MasterDeeJay: RAM gondolatok: Mennyi a minimum? DDR3 is jó?
- Kerékpársportok
- Nyíregyháza és környéke adok-veszek-beszélgetek
- Borderlands 4
- További aktív témák...
- Apple iPhone 15 256GB, Kártyafüggetlen, 1 Év Garanciával
- Apple iPhone 11 Pro 64GB, Kártyafüggetlen, 1 Év Garanciával
- Eladó EDIFIER ES prémium hangszórók ES300 / ES60 / ES20
- Újszerű Asus 15,6"FullHD,10.gen.Core i7(8x3,7Ghz)MX330 2/4GB DDR5 VGA,Vil.bill,12-40GB/256-512SSD+HD
- BONTATLAN DOBOZOS LENOVO LOQ 17 // i7-13650HX // 24GB RAM // 1TB SSD // RTX 5060
- BESZÁMÍTÁS! BenQ GW2270 22 75Hz VA FHD 5ms monitor garanciával hibátlan működéssel
- BESZÁMÍTÁS! ASRock H510M i5 11400F 16GB DDR4 512GB SSD ASUS ROG RX VEGA64 8GB CM Masterbox 5 700W
- Dell Latitude 7420 Core i7-1185 G7, 16GB RAM, SSD, jó akku, számla, 6 hó gar, szép állapot
- GYÖNYÖRŰ iPhone 14 Pro Max 128GB Space Black -1 ÉV GARANCIA - Kártyafüggetlen, MS4400, 100% Akkumulá
- BESZÁMÍTÁS! ASRock B550 R5 5600X 32GB DDR4 512GB SSD RX 6800 16GB Zalman S2 TG Seasonic 750W
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: Central PC számítógép és laptop szerviz - Pécs
Város: Pécs





