PDA

Просмотр полной версии : Функция в цикле


TanaTiX
21.02.2008, 22:59
for (var i=0; i<=3; i++){
eval("_root.cool"+i).onPress=function(){
trace(i);
}
}

Сабж (максимально упрощенный) отказывается работать. Причины и способы решения если не сложно, дамы и господа. Заранее спасибо.

ЗЫ. Тема если поднималась - ткните ссылкой. А то я даже не знаю что в поиске вводить для запроса.

iNils
21.02.2008, 23:02
for (var i=0; i<4; i++){
_root["cool"+i].i = i;
_root["cool"+i].onPress=function() {
trace(this.i);
}
}

CrazyFlasher
21.02.2008, 23:04
for (var i=0; i<=3; i++){
pressHandler(_root["cool" + i], i);
}

function pressHandler(btn/*тип, либо мувик, либо кнопка*/, i:Number){
btn.onPress=function(){
trace(i);
}
}

Olegg
22.02.2008, 11:24
Еще могу добавить - не пользуйся eval.

TanaTiX
22.02.2008, 12:37
Olegg, почему? И чем тогда пользоваться?
Кстати, если уж пошла тема, то в flash я столкнулся с 2я способами соединения переменных: с помощью eval() и в просто добавлением в конце к "[]" При чем работает или один или второй. Разтолкуйте, плиз, в чем разница и когда что следует использовать?

iNils
22.02.2008, 12:47
eval вообще не надо использовать.

Molecula
22.02.2008, 16:54
eval=evil

GFreemen
22.02.2008, 18:16
2 TanaTiX
В твоем цикле просто регистрируется событие онПресс, а код всго что происходит по этому событию НАЧИНАЕТ работать только при наступлении события (онПресс). Т.о. получается что при нажатии на любой eval("_root.cool"+i) у тебя i равно 3. отсюда мораль: необходимо какми-то образом как-то сохранить эту i когда она еще увеличивается в цикле...
Лично я, в коде события кнопки выдираю это самое i из this.

Fernando Costa
22.02.2008, 18:20
субстрингами по нейму что-ли? :D

GFreemen
22.02.2008, 18:27
Абсолютно верно

Fernando Costa
22.02.2008, 18:52
это не по фен-шую совсем

Olegg
22.02.2008, 19:15
Hard Code однозначно...
вариант iNilsа более приемлим.