Просмотр полной версии : for + onRelease = обработчик события нажатия на нефиксированное число кнопок?
приветствую.
у меня есть кнопки, число которых не постоянное (определяется исходя из значения _global.total-1).
при нажатии на одну из них должен выдоватся её номер.
пробывал такими образом:
for (var i:Number = 0; i<_global.total-1; i++) {
this['boot'+i].onRelease = function():Void {
trace(i);
};
}
в трее при нажатии на любую из кнопок выдаёт одно и тоже значение: а именно, последнее значение переменной i в цикле (_global.total-1);
подсабите советом кто знает решение данной задачи.
спасибо.
darksranger
23.11.2008, 16:56
for ( var i:int=0;i<=_global.total-1;i++) {
var boot:MovieClip = create.....
boot.a = i
boot.onRelease = sameFunction
function sameFunction():Void {
trace(a)
}
}
правда незнаю будет ли работать, начинаю уже забывать as2 и писал на коленке, но если не работает и не понятна суть, я могу накидать рабочий вариант
for ( var i:int=0;i<=_global.total-1;i++) {
var boot:MovieClip = create.....
boot.a = i
boot.onRelease = sameFunction
function sameFunction():Void {
trace(a)
}
}
правда незнаю будет ли работать, начинаю уже забывать as2 и писал на коленке, но если не работает и не понятна суть, я могу накидать рабочий вариант
к сожелению, сути не уловил+(
darksranger
23.11.2008, 17:51
ну суть в том, что в цикле, создаем обьект, в этом обьекте создаем свойство, передаем в свойство нужное знаение и при обработке события, на нужном обьекте, читаем это значение, из созданного свойства :)
PS не пишите код в кадрах ... ( решил потому что используете _global )
Вы взяли в руки коробок и десять камушков. Кладете камушек в коробок и говорите кнопке))))) - "когда тебя нажмут, скажешь сколько камушков в коробке". И что, по-вашему, будут говорить кнопки при нажатии??? Конечно, ДЕСЯТЬ.
Вариант 2 - Камушек в коробок, пишете на бумажке цифру, сколько там сейчас камушков, и суете кнопке в карман))). И говорите ей - "Когда тебя нажмут, скажи что написано на этой бумажке".
darksranger
23.11.2008, 19:05
изящное объяснение ) у меня заумно, как то получилось :(
спасибо
теперь смысл понятен
осталось теперь разобраться как это осуществить
darksranger
23.11.2008, 20:43
эм, а чем не угодил мой код ?
nOobCrafter
24.11.2008, 17:46
Ммм люди, я извращенец похоже, НО у меня точно такая же ситуация но двумерный массив, эт что мне надо делать? О_о
var Docs_Download_item_title:Array = new Array();
var Docs_Download_item_url:Array = new Array();
var Docs_header:Array = new Array();
var total_i:Array = new Array();
var total_j:Number;
var i:Number = 0;
var j:Number = 0;
var p:Number = 0;
var offset_j:Number = 0; // вводим доп. переменную, для вычисления расстояния до след раздела
var xml:XML = new XML();
stop();
xml.onLoad = function(){
var nodes_j = this.firstChild.childNodes;
total_j = nodes_j.length;
for( j = 0; j < total_j; j++)
{
Docs_header[j] = nodes_j[j].attributes.razdel;
Docs_Download_item_title[j] = new Array(); // добавляем массиву размерность
Docs_Download_item_url[j] = new Array(); // и тперь он из одномерного превращается в двумерный))))
var nodes_i = this.firstChild.childNodes[j].childNodes;
total_i = nodes_i.length;
for( i = 0; i < total_i; i++)
{
Docs_Download_item_title[j][i] = nodes_i[i].attributes.title; // присваиваем значения двумерному массиву
Docs_Download_item_url[j][i] = nodes_i[i].attributes.url; //
}
create_item_list(); // тут значение total_i, принимает правильные значения, так что пока что построение возможно только в этом месте, потому и блокируем условие if ниже. Иначе total_i принимает значения только последнего абзаца для всех.
}
}
xml.load( "Docs_Download.xml" );
xml.ignoreWhite = true;
function create_item_list():Void
{
var Docs_list = Docs.Docs_Download_item_list.duplicateMovieClip("Docs_Download_item_list"+j, j); //
Docs_list._y = 0;
Docs_list.Docs_header._y = 0;
Docs_list.Docs_header._x = 0;
Docs_list.Docs_header.text = Docs_header[j]; //
for( i = 0; i < total_i; i++)
{
var Docs_Download_item = Docs_list.Docs_Download_fm_item.duplicateMovieClip("Docs_Download_fm_item"+i, i);
Docs_Download_item._y = i * (Docs.Docs_Download_item_list.Docs_Download_fm_item._height + item_spacing) + 30;
Docs_Download_item.Docs_Download_item_title.text = Docs_Download_item_title[j][i];
Docs_Download_item.no = Docs_Download_item.no = Docs_Download_item_url[j][i];; // вот тут полчается как вы описываете, определяем через св-во
trace(Docs_Download_item.no) // тут все шикарно определяется
Docs_Download_item.Docs_Download_item_button.onRelease = function()
{
trace(Docs_Download_item.no) // тут косяк, получаю только последнее значение из списка
//getURL(Docs_Download_item_url[this._parent.no], '_self' );
}
}
}
for (var i = 1; i<=3; i++) {
var btn = this['btn'+i];
btn.j = i;
btn.onRelease = function() {
trace('номер кнопки:' + this.j);
};
}
nOobCrafter
25.11.2008, 11:13
.....ндась, туплю шо ппц..Спс большое
nOobCrafter
10.12.2008, 17:34
Блин, вот уже час бьюсь пытаюсь понять в чем дело, по идее все праивльно, присваиваю сво-ву значение и потом присваиваю его текстовому полю, НО при трейсе получаю undefined.(( В чем тут может быть дело?.
for (i = 0; i < total; i++)
{
_loc3[i] = "fgh" + i;
_loc4[i] = "asd" + i;
mouse_over_muv1[i] = false;
_root.attachMovie("zzz", _loc3[i], i + 10);
_root.attachMovie("ttt", _loc4[i], 1000);
// вот тут начинает то что непонимаю.
_root[_loc4[i]].mark = myXML.firstChild.childNodes[i].attributes.txt;
_root[_loc4[i]].txt.autoSize = "left";
_root[_loc4[i]].txt.text = this._parent.mark;
trace(_root[_loc4[i]].txt.text)
А ссылки делать Вас еще никто не учил?))))
var clip_zzz:MovieClip = _root.attachMovie("zzz", _loc3[i], i + 10);
var clip_ttt:MovieClip = _root.attachMovie("ttt", _loc4[i], 1000); // Все на одну глубину???
clip_zzz.mark = myXML.firstChild.childNodes[i].attributes.txt;
и так далее.
nOobCrafter
10.12.2008, 18:06
хм.. такая идея приходила но делал только что то типа:
mov = _root[_loc4[i]];
тоже кстати неполучалось, как щас понимаю забыл написать var.( Щас проверю.
Хм..всеравно не получается((
for (i = 0; i < total; i++)
{
_loc3[i] = "fgh" + i;
_loc4[i] = "asd" + i;
var clip_zzz:MovieClip = _root.attachMovie("zzz", _loc3[i], i + 10);
var clip_ttt:MovieClip = _root.attachMovie("ttt", _loc4[i], 1000 + i);
clip_ttt.mark = myXML.firstChild.childNodes[i].attributes.txt;
clip_ttt.txt.text = this._parent.mark;
Вообще пишет undefined
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.