Kezdőoldal » Számítástechnika » Weblapkészítés » Elképzelhető hogy eseménykezel...

Elképzelhető hogy eseménykezelővel nem lehet tömbben tárolt javascript objektumreferenciára hivatkozni, vagy csak én vagyok béna?

Figyelt kérdés

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)



2014. márc. 5. 11:16
1 2
 1/15 anonim ***** válasza:

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...

2014. márc. 5. 15:54
Hasznos számodra ez a válasz?
 2/15 A kérdező kommentje:
a this.name csak egy példa, this.value is lehet, mintha én is hallottam volna valami olyasmit hogy a javascript pefix nem kötelező, de ki szoktam rakni, márpedig a megszokás nagy úr. :)
2014. márc. 6. 08:17
 3/15 A kérdező kommentje:
Egyébként az hót ziher hogy én csak "Tomb"-ot adtam meg a címkék között... :D
2014. márc. 6. 08:18
 4/15 anonim ***** válasza:

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.

2014. márc. 6. 14:06
Hasznos számodra ez a válasz?
 5/15 A kérdező kommentje:

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.

2014. márc. 6. 14:23
 6/15 A kérdező kommentje:
mármint ezek szerint nyilván nem asszociatív tömbben tárolom, hanem egy tömb objektumban... :)
2014. márc. 6. 14:25
 7/15 A kérdező kommentje:

illetve


onclick:"javascript:eljaras(this.value)"


Nyilván... :)

2014. márc. 6. 14:26
 8/15 A kérdező kommentje:
NA jó, találtam egy cikket a weblaboron, valószínűleg érdemes lesz elmélyedni benne.... :)
2014. márc. 6. 14:38
 9/15 anonim ***** válasza:

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...

2014. márc. 7. 11:59
Hasznos számodra ez a válasz?
 10/15 A kérdező kommentje:

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

2014. márc. 13. 05:11
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!