apscience
apscience

Reputation: 7273

Changing text with AS3 in a for loop - works for first one, others don't

I have a movieclip called Tab that has two text-fields: named toptxt and bottomtxt. When I create new instances of Tab in a for loop and change the text, only the first instance's text is changed. The rest is the default text in the movieclip.

Here is the code I am using:

for(var i = 0; i < 5; i++){
    var newTab = new Tab();
    newTab.toptxt.text = nameArray[i]; //nameArray is fine
    trace(newTab.toptxt.text); //returns expected value, textfield isn't
    newTab.bottomtxt.text = jobs[i];
    bottom.addChild(newTab); //bottom is a class var.
    newTab.x = i * (newTab.width + 3);
}

Even if I change nameArray[i] to "Test", only the first one works.

This problem does not occur if I don't do it in for loops, however I'd like to do it in a for loop.

Here is a screenshot of the problem: https://i.sstatic.net/ByvUq.png

Upvotes: 0

Views: 362

Answers (1)

Dominic Tancredi
Dominic Tancredi

Reputation: 42342

Pull your declaration of var newTab = new Tab(); outside of the for loop, so your code looks like this:

 var newTab:Tab;
 for(var i:int = 0; i < 5; i++){
    newTab = new Tab();
    newTab.toptxt.text = nameArray[i]; //nameArray is fine
    trace(newTab.toptxt.text); //returns expected value, textfield isn't
    newTab.bottomtxt.text = jobs[i];
    bottom.addChild(newTab); //bottom is a class var.
    newTab.x = i * (newTab.width + 3);
}

Actionscript is becoming confused when you create an instance and assign newTab as a pointer to it, instead of creating a pointer or reference initially, and then creating new instances and adding them to your displayList.

Also, trace your output of nameArray[i] and confirm that those values are correct (i.e. trace(nameArray[i]);. It's possible the data isn't set properly earlier in your code.

Upvotes: 1

Related Questions