Просмотр полной версии : Функция в цикле
for (var i=0; i<=3; i++){
eval("_root.cool"+i).onPress=function(){
trace(i);
}
}
Сабж (максимально упрощенный) отказывается работать. Причины и способы решения если не сложно, дамы и господа. Заранее спасибо.
ЗЫ. Тема если поднималась - ткните ссылкой. А то я даже не знаю что в поиске вводить для запроса.
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);
}
}
Еще могу добавить - не пользуйся eval.
Olegg, почему? И чем тогда пользоваться?
Кстати, если уж пошла тема, то в flash я столкнулся с 2я способами соединения переменных: с помощью eval() и в просто добавлением в конце к "[]" При чем работает или один или второй. Разтолкуйте, плиз, в чем разница и когда что следует использовать?
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
это не по фен-шую совсем
Hard Code однозначно...
вариант iNilsа более приемлим.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.