Показать сообщение отдельно
Старый 09.08.2011, 19:00
brodotsky вне форума Посмотреть профиль Отправить личное сообщение для brodotsky Найти все сообщения от brodotsky
  № 1  
Ответить с цитированием
brodotsky

Регистрация: Jul 2011
Сообщений: 18
По умолчанию Один обработчик для нескольких кнопок

У меня есть 3 кнопки: Button1, Button2, Button3.
Нужно обрабатывать нажатие на каждую кнопку,
но прикреплять к каждой кнопке сценарий неудобно.
Хочу сделать один обработчик,
который будет по-разному реагировать на кнопки.
К первому кадру ролика я прикрепляю сценарий:
Код AS1/AS2:
Buttons=Array (Button1,Button2,Button3);
for (I=0;I<3;I++)
  Buttons [ I ].onPress=
    function ()
      {trace (I);}
Ожидаемый результат:
при нажатии на кнопку Button1 выведется 0,
при нажатии на кнопку Button2 выведется 1,
при нажатии на кнопку Button3 выведется 2.

На самом деле:
при нажатии на любую кнопку выводится 3.

Почему так происходит?
Потому что создание обработчика - это как бы отложенный вызов функции.
Поэтому переменная I успевает стать равной 3, раньше чем запустится обработчик.
Именно это значение и выводится.

Можно изменить сценарий:
Код AS1/AS2:
Buttons=Array (Button1,Button2,Button3);
for (I=0;I<3;I++)
  Buttons [ I ].onPress=
    function ()
      {trace (I);}
I=12345;
Теперь при нажатии на любую кнопку выводится 12345;

Короче говоря, в обработчик попадает не значение переменной I, а сама переменная.
Оператор trace (I) выводит последнее присвоенное переменной I значение.

Вопрос - как у Чернышевского - что делать?
Как заставить обработчик иметь дело со старыми значениями переменных?
__________________
Kiss my AS!


Последний раз редактировалось brodotsky; 09.08.2011 в 19:06.