PDA

Просмотр полной версии : Динамические ф-кции для кнопок


KirAmp
07.07.2010, 23:40
Здравствуйте
У меня есть цикл
for (j = 0; j < _root.music_length; j++)
{
this['player' + j].onPress = function()
{
_root.player.now_playing = j;
_root.player.gotoAndStop(2);
};
}
Дело в том что в этоге, после использования цикла, j становится равной music_length, и все кнопки соответственно выполняют _root.player.now_playing = music_length;

Как это обойти?

Спасибо!!

Добавлено через 34 минуты
Проблема решена:
for (j = 0; j < _root.music_length; j++)
{
this['player' + j].onPress = function()
{
this._name.toString().charAt(7);
_root.player.now_playing = this._name.toString().charAt(6);
if (this._name.toString().charAt(7) != '')
{
_root.player.now_playing = _root.player.now_playing + this._name.toString().charAt(7);
}
if (this._name.toString().charAt(8) != '')
{
_root.player.now_playing = _root.player.now_playing + this._name.toString().charAt(8);
}
_root.player.now_playing = Number(_root.player.now_playing);
_root.player.gotoAndStop(2);
};
}
:wacko::wacko::wacko::wacko::wacko::wacko:

mooncar
08.07.2010, 00:25
Вы меня поразили.
Когда-то тоже было мелькнула мысль делать в таком случае разбор имени. Я прикинул как это будет выглядеть и меня все это смутило. Вас нет. :)
Вот так оказалось поизящнее:
for (j = 0; j < _root.music_length; j++)
{
this['player' + j].num = j; //"запомним"
this['player' + j].onPress = plOnPress;
}


function plOnPress()
{
_root.player.now_playing = this.num; //"вспомним"
_root.player.gotoAndStop(2);
};

KirAmp
08.07.2010, 00:46
Меня самого поразило мое мышление. Не знал что
this['player' + j].num = j;
Запомнит именно это число j, и не будет меняться при изменении j. Не хватило знаний в ООП.

mooncar
08.07.2010, 00:51
Ага. Просто это примитивный тип данных, и поэтому запомнится именно значение.