Просмотр полной версии : Область видимости переменной
Всем привет!
Есть вот такой код:
var RegionsCount = 70;
var Regions:Array = new Array();
for (i=1; i<=RegionsCount; i++) {
Regions[i] = "Region #"+i;
}
for (i=1; i<= RegionsCount ; i++)
{
_root.logo_mc.rusmap['region'+i].onRollOver = function () {
_root.lefttoptext.text = _root.Regions[i];
}
}
в целом всё работает, но в строке
_root.lefttoptext.text = _root.Regions[i];
не видно переменную i
пробовал делать _root.i - не помогает.
var RegionsCount = 70;
var Regions:Array = new Array();
for (i = 1; i <= RegionsCount; i++) {
Regions[i] = 'Region #' + i;
_root.logo_mc.rusmap['region' + i].num = i; //запомним номер внутри мувика
_root.logo_mc.rusmap['region' + i].onRollOver = regionRollOver; //назначим функцию-обработчик
}
function regionRollOver () {
var k:Number = this.num; //извлечем номер
_root.lefttoptext.text = _root.Regions[k];
}
Просто в вашем варианте в конце работы цикла i примет значение 71 (именно так), и именно это значение и будет использоваться для всех обработчиков.
AzagThoth
09.04.2010, 20:39
var RegionsCount = 70;
var Regions:Array = new Array();
for (i=1; i<=RegionsCount; i++) {
Regions[i] = "Region #"+i;
}
for (i=1; i<= RegionsCount ; i++)
{
_root.logo_mc.rusmap['region'+i].onRollOver = function (i:Number):Void {
_root.lefttoptext.text = _root.Regions[i];
}
}
Так попробуйте. Не проверял. Но в теории должно работать.
Так попробуйте. Не проверял. Но в теории должно работать.
Ни по теории, ни как не должно.
Функция-обработчик onRollOver не имеет аргументов, кроме ссылки на сам объект, событие которого обрабатывается (т.е. this) и на саму себя.
AzagThoth
09.04.2010, 21:21
Да, Вы правы. Что то я потупил :) Сейчас проверил - действительно моё предложение сущий бред.
i=10;
clip.onRollOver=function(i):Void{
trace(i);
}
В отпут при наведении - undefined
А вот так:
clip.i=10;
clip.onRollOver=function():Void{
trace(this.i);
}
Всё как надо. Спасибо что указали на то, что НЕЛЬЗЯ передавать этой функции аргументы!
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.