PDA

Просмотр полной версии : OnRelease в цикле


diclofoss
05.10.2007, 16:28
У меня есть цикл:


for (i=0; i<total; i++) {
image[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
link[i] = xmlNode.childNodes[i].childNodes[1].firstChild.nodeValue;
...
ls = link[i];
_root['clip_d']['mc'+i].onRelease = function() {
trace(ls);
};
}


В чем моя ошибка, почему при нажатии по кнопке функция берет последний ls а не те которые были установлены в цикле.

Molecula
05.10.2007, 16:33
А так:
for (i=0; i<6; i++) {
_root['clip_d']['mc'+i].onRelease = function() {
trace(xmlNode.childNodes[this._name.substr(2,2)].childNodes[0].firstChild.nodeValue);
trace(xmlNode.childNodes[this._name.substr(2,2)].childNodes[1].firstChild.nodeValue);
}
}

diclofoss
05.10.2007, 16:54
спасибо. а что это за name.substr(2,2)]. просто выдернуто айди из имени?

Molecula
05.10.2007, 16:59
Не, оно через два сисвола в имени мува берет два других.
Т.е. у mc2 - это будет 2, а у mc23 - 23, но у mc254 - будет 25, что бы было 254 нужно так написать name.substr(2,3).

Kikasso
05.10.2007, 17:19
Т.е. у mc2 - это будет 2, а у mc23 - 23, но у mc254 - будет 25, что бы было 254 нужно так написать name.substr(2,3).
Учите мануал. Нафига тут второй параметр?
var name1 = 'mc1234';
var name2 = 'mc5';
trace( '>' +name1.substr(2) + '<');
trace( '>' +name2.substr(2) + '<');
trace( '>' +name1.substring( 2 ) + '<' );
trace( '>' +name2.substring( 2 ) + '<' );

Molecula
05.10.2007, 17:28
If length is not specified, the substring includes all the characters from the start to the end of the string.

Кстати, да.
что там за пропеллер у тебя?

Kikasso
05.10.2007, 17:53
что там за пропеллер у тебя?Это когда-то костюмы на Кракатук делали.

Molecula
05.10.2007, 17:55
:drinks:

etc
05.10.2007, 19:55
А так:
for (i=0; i<6; i++) {
_root['clip_d']['mc'+i].onRelease = function() {
trace(xmlNode.childNodes[this._name.substr(2,2)].childNodes[0].firstChild.nodeValue);
trace(xmlNode.childNodes[this._name.substr(2,2)].childNodes[1].firstChild.nodeValue);
}
}
И вам лень копипастить «xmlNode.childNodes[this._name.substr(2,2)].childNodes[1].firstChild.nodeValue» сотню раз? Известно ли вам, что строки подобного плана не только ухудшают читабельность, но ещё и зверско тормозят плеер?

Molecula
05.10.2007, 20:12
А как же быть?

etc
05.10.2007, 20:13
Делать ссылки на ноды и работать с ними, а не копировать по сто раз один и тот же путь.

Molecula
05.10.2007, 20:15
Понял.

diclofoss
05.10.2007, 21:26
спасибо за замечания... пока конечно подтормаживает у меня больше из за загрузки превъюшек:)
Выглядит вот так вот:
http://www.madeinparis.ru/inap2.php

В дальнейшем хочу ещё прелоадинг написать для каждой картинке:)
Пока демка и не всё ещё реализованно. Но нужно в скорейшем образом избавиться от кривого джава скрипта написанного ранее.

udaaff
05.10.2007, 22:52
У меня есть цикл:


for (i=0; i<total; i++) {
image[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
link[i] = xmlNode.childNodes[i].childNodes[1].firstChild.nodeValue;
...
ls = link[i];
_root['clip_d']['mc'+i].onRelease = function() {
trace(ls);
};
}


В чем моя ошибка, почему при нажатии по кнопке функция берет последний ls а не те которые были установлены в цикле.

Еще парочка вариантов:
for (i=0; i<total; i++) {
image[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
link[i] = xmlNode.childNodes[i].childNodes[1].firstChild.nodeValue;
//
ls = link[i];
_root['clip_d']['mc'+i][ls] = ls;
_root['clip_d']['mc'+i].onRelease = function() {
trace(this.ls);
};
}
for (i=0; i<total; i++) {
image[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
link[i] = xmlNode.childNodes[i].childNodes[1].firstChild.nodeValue;
//
ls = link[i];
_root['clip_d']['mc'+i].onRelease = genOnRelease(ls);
}
function genOnRelease(ls) {
return function () {
trace(ls);
};
}

diclofoss
05.10.2007, 22:56
спасибо.