Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Задание обработчиков кнопок в цикле (http://www.flasher.ru/forum/showthread.php?t=97103)

Ведьмак 14.06.2007 01:01

Задание обработчиков кнопок в цикле
 
Господа, подскажите пожалуйста:
есть цикл, в котором аттачю кнопки в мувик, и задаю им обработчики.


Код:

function initNav1() {
        var i = 0;
        while (i<menu.length) {
                var mc = mc_menu.attachMovie("nav1_item", "mc_nav1_item_"+i, int(i+100), {_x:i*100 ; _y:0});
                var bt = mc.attachMovie("button", "mc_bt_"+i, int(i+110));
                //описание кнопки
                bt.onRollOver = function() {
                        mc.mc_text_on._alpha = 100;
                        mc.mc_text._alpha = 0;
                        trace(bt);
                };
                bt.onRollOut = function() {
                        mc.mc_text_on._alpha = 0;
                        mc.mc_text._alpha = 100;
                };
                i++;
        }
}

в результате на какую бы кнопку я не навожу я получаю трэйс - trace(bt), что это кнопка та, которая обрабатывалась данным циклом последней, и соответсвенно идет обработка mc тоже только последнего...

Т.е. я получаю i одинаковых кнопок, с одинаковыми индексами и одинаковой обработкой...

В чем здесь прокол?

BigDan 14.06.2007 01:07

Код:

for(var i=0;i<=10;i++){
 _root["btn"+i].onPress = function(){
    trace(this);
 }
}


Ведьмак 14.06.2007 02:29

отличный совет, а главное настолько оторванный от контекста, насколько это возможно....
ну заменил я в моем цикле bt в обработчиках на mc["mc_bt_"+i]... все равно картина такая же...

если туда же добавить
Код:

bt.onRelease = function(i) {
        trace(i);
};

то я получаю кликая по всем кнопкам последний индекс(i) в моем цикле...

alexcon314 14.06.2007 08:40

А если "подмешать" в имя что-нибуть случайное?

Tardos Mors 14.06.2007 08:54

Ну так правильно, переменная то берется одна и та же.
Код:

bt.i = i;
bt.onRelease = function() {
        trace(this.i);
};


this.create 14.06.2007 10:15

Код:

function initNav1() {
    var i = 0;
    while (i<menu.length) {
        var mc = mc_menu.attachMovie("nav1_item", "mc_nav1_item_"+i, int(i+100), {_x:i*100 ; _y:0});
        var bt = mc.attachMovie("button", "mc_bt_"+i, int(i+110));
        //описание кнопки
        bt.onRollOver = function() {
            mc.mc_text_on._alpha = 100;
            mc.mc_text._alpha = 0;
            trace(this);
            trace(this._parent);
        };
        bt.onRollOut = function() {
            mc.mc_text_on._alpha = 0;
            mc.mc_text._alpha = 100;
        };
        i++;
    }
}


Ведьмак 14.06.2007 11:20

Cпасибо this.creature и Tardos Mors... после замены в обработчике mc на this._parent функции стали нормально обращаться к каждой кнопке...

объясните, pls, почему нельзя было использовать mc? потому что эти функции , как бы сказать не запоминаются с теми переменными которыми они были заявлены каждый раз в цикле, а просто "существуют" и при активации кнопки используют последнее заявленой значение i и mc ??

chingachgoog 14.06.2007 13:05

http://flasher.ru/forum/showthread.php?t=96204

Ведьмак 14.06.2007 14:11

2 chingachgoog: спасибо... именно это я и подозревал...


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

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