Elképzelhető hogy eseménykezelővel nem lehet tömbben tárolt javascript objektumreferenciára hivatkozni, vagy csak én vagyok béna?
Például
script
var tomb = new Array();
tomb['ertek'] = new objektum('ertek');
html
onclick="javascript:tomb[this.name].fuggveny(this.name)"
már nem emlékszem hogy milyen hibaüzenetet írt ki, de ha azt mondjátok hogy ilyet lehet, akkor megkeresem hogy mi volt a hiba... :D
(bár már elég sok mindent kipróbáltam)
Mit keres ott az a "javascript:" prefix? ;)
Emellett émi bakugrást is látok abban a "this.name" hajigálásban, de az már egy másik történet...
Tömb Raider - nice :D
Rosszul használod a tömböt, az az alapvető baj. JS-ben NINCS asszociatív tömb. Erre a célra objektumot tudsz használni; ahogyan ez itt is történik, így azonban nagy valószínűséggel eltöröd az Array objektum funkcionalitását.
Kíváncsi volnék a kapott hibaüzenetre, mert azzal azért beljebb lennénk - Ha véletlenül IE-t használnál, tegyél egy próbát Firefoxszal, vagy Chrome-mal is, mert az Explorer hibaüzenetei gyakran semmire sem jók.
Ja igen, asszociatív, ezt a szót kerestem... :D
Hát valamilyen szinten működik, de csak úgy, ha előbb létrehozok egy új függvényt, amiben meghívom ezt az asszociatív tömbben tárolt objektum egyik eljárását.
Pl.
function objektum()
{
var this.eljaras = new eljaras;
function eljaras(){}
}
tomb['valami'] = new objektum();
ezek után az nem működik hogy
value="valami" onclick:"javascript:tomb[this.value].eljaras()"
de az igen hogy onclick:"javascript:eljaras()"
ha mellette létrehozok egy olyan függvényt hogy
function eljaras(valtozo)
{
tomb[valtozo].eljaras();
}
Szóval így működik, de nem tartom annyira elegánsnak hogy létre kell hoznom egy külön eljárást hogy elindítsak egy másikat... :D (remélem azért ezt a problémámat átérzi valaki)
Egyébként mindenképpen szükségem van az asszociatív tömb használatára, mivel objektumon belül nem tudok mindig önmagára hivatkozni.
illetve
onclick:"javascript:eljaras(this.value)"
Nyilván... :)
Abszolút félreérted és misuse -olod a tömböt. Amikor említettem, hogy JS-ben nincs asszociatív tömb, úgy értettem, hogy nem használhatsz sztring indexet. Ha ilyen adatstruktúrát akarsz, akkor vagy - megkötésekkel - egy mezei objektumot kell használnod, vagy szakszerűen magadnak implementálnod azt (pl. hashmap).
"var this.eljaras" - na ez megint jól össze van kutyulva. Vagy "var eljaras" és akkor kvázi private, vagy "this.eljaras" és akkor tulképp public. A kettő együtt soha.
Két megoldás is van arra, hogy egy objektum "private" metódusain belül az objektumra tudj hivatkozni. Az egyik a bindolás (gugli: MDN bind this), a másik pedig ez:
function MyObject(name) {
˙˙˙˙this.name = name;
˙˙˙˙var self = this;
˙˙˙˙var examplePrivateMethod() {
˙˙˙˙˙˙˙˙alert(self.name);
˙˙˙˙}
˙˙˙˙examplePrivateMethod();
}
Mi a konkrét megoldandó probléma? Úgy talán többet tudnék segíteni...
itt félreírtam, "public"-ként használtam (var nélkül).
Köszönöm a választ, kipróbálom, oszt ha nem megy, visszajövök... :)
Meg még sokmindennek kell utánanéznem, hogy egyáltalán egy normális kérdést fel tudjak tenni ezzel kapcsolatban. :D
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!