Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как установить обработчик в цикле? (https://javascript.ru/forum/misc/5055-kak-ustanovit-obrabotchik-v-cikle.html)

voidd 11.09.2009 16:35

Как установить обработчик в цикле?
 
for(var i = 0; i < v.length; i++) {	
ImgArr[i] = new Image();
ImgArr[i].src = v.charAt(i)+'.png';				
ImgArr[i].style.opacity = 0;				
ImgArr[i].onload = function () {count += ImgArr[i].offsetWidth;};
Wrap.insertBefore(vImgArr[i], null);
}


Народ, Код вот такой, обработчики не назначаются, как сделать правильно? Спасибо

B~Vladi 11.09.2009 16:39

а что такое ImgArr? Вы определили этот массив(объект)?!

voidd 11.09.2009 16:41

Да все переменные и массив определен выше)

Вообще по идее для каждого onload должен создаваться отдельный контекст? сейчас в цикле обработчики отказываються работать...( не сталкивался с таким еще..

Riim 11.09.2009 16:44

ImgArr[i].style.opacity = '0.0';
ImgArr[i].onload = (function(ii) {
return function () {count += ImgArr[ii].offsetWidth};
})(i);

B~Vladi 11.09.2009 16:45

Проверьте есть ли v.length и какие src генеряцо?! Так вроде по синтаксису всё ок.

Octane 11.09.2009 16:51

onload добавляйте до src
var img = document.createElement("img");
img.onload = function() {
    alert("Image");
};
img.src = "http://javascript.ru/forum/images/ca_serenity/misc/logo.gif";
document.body.insertBefore(img, document.body.firstChild);

voidd 11.09.2009 16:55

Riim, если не сложно, объясните как передается переменная ii в функцию, или где об этом почитать можно)

Octane 11.09.2009 16:58

http://javascript.ru/basic/closure#p...-ispolzovaniya

voidd 11.09.2009 17:21

ImgArr[i].onload = (function(ii) {
count += ImgArr[ii].offsetWidth;
})(i);
от так будет тоже раб) и в примере выше кудато значения первые терялись..

Riim 11.09.2009 17:24

Цитата:

Сообщение от voidd
ImgArr[i].onload = (function(ii) {
count += ImgArr[ii].offsetWidth;
})(i);
от так будет тоже раб) и в примере выше кудато значения первые терялись..

Функция возвращает undefined, т. е. обработчик обнуляется.


Часовой пояс GMT +3, время: 18:15.