Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Интересный случай... (http://www.flasher.ru/forum/showthread.php?t=37912)

Генч 01.10.2002 21:19

Интересный случай...
 
... как тут быть

for(j=0;j<texts.length;j++){
this["button"+j].onRelease = function() {
num=j;


}
}trace(_root.action_man);

вот такой кодик.
поясню - у меня неизвесное колво кнопок (=texts.length).
я пытаюсь обработать нажатие на них вот таким вот образом.
но, фуфел - трэйс выдаёт всегда 5. на какую бы кнопку я не нажимал.
как бы подругому это сделать?
вариант - написать код в Экшене самой кнопки - не катит.
:confused: :rolleyes:

Генч 01.10.2002 21:22

ох.. парит меня. вот так я хотел написать:



for(j=0;j<texts.length;j++){
this["button"+j].onRelease = function() {
num=j;

_root.action_man = j;
}
}trace(_root.action_man);


и равно всегда не 5ти, а texts.length.

TTS 01.10.2002 21:31

Код:

function setonrelease(subj,a){
  subj.onRelease = function() { num=a; _root.action_man = a; }
}

for(....) setonrelease(eval("button"+j),j);


Генч 01.10.2002 21:35

TSS всегда рядом. :)

Nox Noctis 02.10.2002 01:10

вариант, который предложил TTS "стилистически" правильнее, но работать тоже не будет :)
все присвоения, которые вы делаете в теле создаваемой функции произойдут уже в момент ее создания...
то есть сколько нужно раз тем переменным присвоится какое-то значение, но потом, при выполнении онРелизов - желаемого эффекта не будет...
Код:

function setonrelease(subj, a) {
        subj.onRelease = function() {
                _root.action_man = this.num;
                trace(_root.action_man);
        };
        subj.num = a;
}
for (i=0; i<5; i++) {
        setonrelease(this["button"+i], i);
}

так работать будет - то есть в сами кнопки надо запихать свойство, значение которого потом надо передавать в _root.action_man


и вообще - с динамическим созданием функций надо работать оч аккуратно...
мы тут спорили как-то с Джоном по этой части...
...и пришли к выводу, что это может работать самым неожиданным образом :))

например:
Код:

function a() {
        var p = "!!!!"
        var b = function () {
                var test = p
                trace(test);
        };
        var p = "????"
        return b;
}
a()();

...улавливаете ? ;)
берем переменную,
создаем функцию, которая использует ее значение
(а указателей-то на строковые и числовые переменные во флэше как-бы нет вообще-то...)
а уже _после_ создания функции меняем значение переменной...

...и что получаем ? функция использует последнее значение _временной_ переменной...
чудеса...

УильямБрэдберри 02.10.2002 01:22

for (j=0; j<texts.length; j++) {
this["button"+j].num = j;
this["button"+j].onRelease = function() {
trace(this.num);
};
}

Nox Noctis 02.10.2002 01:27

вот, видите ? :)
УильямБрэдберри тоже так считает :)
значит вы на правильном пути :))

а использовать или не использовать функцю для создания онРелизов -
зависит от слсжности конструкций в конкретном случае...
просто как удобнее :)


Часовой пояс GMT +4, время: 21:38.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.