webForumDet fria alternativet

Hjälp med addEventlistener / removeEventlistener

Flash

4 svar · 664 visningar · startad av UrMe

Medlem sedan apr. 2001762 inlägg
Frågan#1

Har problem att ta bort en eventlistener, så här ser koden ut:

imageContainer1_mc.addEventListener(MouseEvent.CLICK, changeThumbPicture(number, XML_itemType[number]));

function changeThumbPicture(imageID:int, itemType:String):Function {
	return function():void {
		trace(imageID+"-"+itemType);
		switch(itemType) {
			case "asd":
				currentAsdID = XML_itemID[imageID];
				asdContainer_mc.objectAsd_mc.addChild(XML_imageThumb[imageID]);
			break;
			case "asd2":
				currentAsd2ID = XML_itemID[imageID];
				asd2Container_mc.objectAsd_mc.addChild(XML_imageThumb[imageID]);
			break;
		}
	}
}

Har provat att ta bort den så här, "asd" är vad XML_itemType[number] innehåller.

imageContainer1_mc.removeEventListener(MouseEvent.CLICK, changeThumbPicture(0,"asd"));

Och så här:

imageContainer1_mc.removeEventListener(MouseEvent.CLICK, changeThumbPicture(number,XML_itemType[number]));

Får inga felmeddelanden, men den tar inte bort Listenern heller :/

Medlem sedan juni 2006244 inlägg
#2

funkar det ens att lägga till listeners på det där sättet?
vad jag vet kan man inte ange funktionens parametrar på det viset.
Men jag måste undersöka hur det där fungerar som du gör =)

Såhär hade jag gjort iaf:

imageContainer1_mc.addEventListener(MouseEvent.CLICK, changeThumbPicture);

imageContainer1_mc.removeEventListener(MouseEvent.CLICK, changeThumbPicture);

Medlem sedan apr. 2001762 inlägg
#3

Jo det fungerar, jag hittade det på ett annat forum, men om jag gör som du gör där, då kan jag inte skicka med de två variablerna till funktionen? Eftersom jag har flera imagecontainers som ska ha samma eventlistener fast olika variabler ska skickas med för varje imagecontainer

Medlem sedan juni 2006244 inlägg
#4

om imageContainer1_mc är av typen MovieClip kan du enkelt sätta en egenskap på den.

imageContainer1_mc.imageID = 4;

imageContainer1_mc.addEventListener(MouseEvent.CLICK, clickHandler);

function clickHandler(e:MouseEvent):void
{
var ic:MovieClip = MovieClip( e.target );
trace( ic.imageID );
}

Alternativt lagrar du dina imagecontainers i någon form av associativ array, något åt det här hållet:
var icArray:Array = new Array();
icArray[imageContainer1_mc] = {imageID: 4, itemType: "photo"};

function clickHandler(e:MouseEvent):void
{
var ic:MovieClip = MovieClip( e.target );
trace( icArray[ic].imageID );
}

Medlem sedan apr. 2001762 inlägg
#5

Ah.. tackar! Det fungerar bra, tur att man lär sig något nytt varje dag :)

263 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
132 ms — ändringar (db)