PDA

Volledige versie bekijken : mouseEvent in for lus


W0utR
%Europe/Berlin %534 %2008, 12:50
Hallo, ik zit weer met een probleem.

Ik heb in een for lus een mouseEvent geplaats, maar daarbij krijg ik altijd een error

this["tekstVeld"+i].addEventListener(MouseEvent.CLICK, gotoWebsite);

function gotoWebsite(Event:MouseEvent):void {
var url:String = xml.item[i].website;
var request:URLRequest = new URLRequest(url);
try {
navigateToURL(request, "_blank");
} catch (e:Error) {
trace("Error occurred!");
}
}

hij geeft dus deze error, waaruit ik kan afleiden dat het mouseEvent welk blijkt te werken
TypeError: Error #1010: A term is undefined and has no properties.
at MethodInfo-1()

Dauntless
%Europe/Berlin %536 %2008, 12:52
Verander this["tekstVeld"+i] alvast door this.getChildByName("tekstVeld"+i), evt. gevolgd door de nodige cast.

Run je swf eens in debug mode, dan krijg je in flash ook de regelnummers te zien. Dan kan je veel specifieker bepalen waar de fout zit.

W0utR
%Europe/Berlin %542 %2008, 13:00
ik heb nu al die this['....'+i] verandert door this.getChildByName("...."+i)
in debug mode krijg ik dan een fout op regel 22.

Wat deze regel is:
this.getChildByName("tekstVeld"+i) = new TextField();

de error:
1105: Target of assignment must be a reference value.

Dauntless
%Europe/Berlin %544 %2008, 13:03
Dat is ook een vreemde regel... Wat wil je juist doen? Is dit niet wat je zoekt:
var myTF:TextField = new TextField();
myTF.name = "tekstVeld"+i;
this.addChild(myTF);

W0utR
%Europe/Berlin %545 %2008, 13:05
ik zal ff mijn code posten.

function onLoaded(e:Event):void {
xml = new XML( e.target.data );
var il:XMLList = xml.item;

for (var i:uint = 0; i < il.length(); i++) {
this.getChildByName("tekstVeld"+i) = new TextField();
this.getChildByName("tekstVeld"+i).x = xml.item[i].xPositie;
this.getChildByName("tekstVeld"+i).y = xml.item[i].yPositie;
this.getChildByName("tekstVeld"+i).text = xml.item[i].name;
this.getChildByName("tekstVeld"+i).autoSize = TextFieldAutoSize.LEFT;
this.getChildByName("tekstVeld"+i).selectable = false;
this.getChildByName("tekstVeld"+i).addEventListener(MouseEvent.CLICK, gotoWebsite);

function gotoWebsite(Event:MouseEvent):void {
var url:String = xml.item[i].website;
var request:URLRequest = new URLRequest(url);
try {
navigateToURL(request, "_blank");
} catch (e:Error) {
trace("Error occurred!");
}
}

// de tekstopmaak
var tekstOpmaak:TextFormat = new TextFormat();
tekstOpmaak.color = xml.item[i].kleur;
tekstOpmaak.size = 22;

this.getChildByName("tekstVeld"+i).setTextFormat(tekstOpmaak);
main.addChild(this.getChildByName("tekstVeld"+i));
}
}

Dauntless
%Europe/Berlin %558 %2008, 13:24
Verander al die 'getChildByNames' naar wat ik je gaf. Dus overal 'myTF.x = ; myTF.y = ;' etc.

W0utR
%Europe/Berlin %563 %2008, 13:31
Ah ok, ik heb het nu zo verandert.

Dan krijg ik wel nog altijd dezelfde error als ik klik op een tekstvakje.

edit: gevonden
blijkbaar kon ik die "i" niet gebruiken in die function van gotoWebsite, dus heb ik daarin ook een forlusje gemaakt