[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: цикл, функция, аргумент
PiratXXX
Всем добрый день, вобщем даже не знал как тему назвать!

Есть многомерный массив, который перебираю при помощи for in, далее в этом цикле присваеваю событие каждому элеменкту(при помощи самописной не хитрой функции), и вот наконец, все работает, все события присвоены всем объектам.

<script type="text/javascript">
$EventUse = function(Obj, Type, Listener) {
if(Obj.addEventListener) {
Obj.addEventListener(Type, Listener, false);
}
else if(Obj.attachEvent) {
Obj.attachEvent("on"+Type, Listener);
}
else {
Obj["on"+Type] = Listener;
}
}
;
Cont_Photo_show = function(PhotosInf) {
for(var k in PhotosInf) {
$EventUse(document.getElementById(PhotosInf[k]['Name']), "click", function() {alert(k);} );
};
}
Cont_Photo_show(PhotosInf);
</
script>


Вот так все происходит события вешаються, и работают вот только если к примеру в массиве информация о десить объектах и соответственно события будем вешать на десять
объектов то при нажатии на любой из объектов будет выпадать окошко с цифрой 10.

А нужно что при нажатии на первый объект выпадало окошко с цифрой 1, и т.д.

Заранне все спасибо!!! Помогите пожалуйста!



Спустя 1 час, 18 минут, 32 секунды (21.07.2011 - 16:36) killer8080 написал(а):
а если вместо
function() {alert(k);}

сделать так
(function(k) {return function() {alert(k);};})(k)

Спустя 58 минут, 19 секунд (21.07.2011 - 17:35) PiratXXX написал(а):
killer8080
Спасибо тебе огромное!!! Работает!!! Можешь пожалуйста теперь объяснить(расшифровать) эту конструкцию, для "особо" одаренных... Еще раз спасибо!!!

Спустя 16 минут, 25 секунд (21.07.2011 - 17:51) killer8080 написал(а):
В твоём варианте функцию брала значение переменной k из глобальной области видимости, а там её значение соответствовало значению ключа последней итерации цикла.
В моём варианте переменная передаётся в виде аргумента, в безымянную функцию, соответственно каждому колбэку своё значение.
Объяснять я особо не умею, ну как бы так smile.gif

О замыканиях можешь почитать здесь

Спустя 24 минуты, 14 секунд (21.07.2011 - 18:15) PiratXXX написал(а):
Спасибо! Сейчас буду изучать!


_____________
http://flibro.com/
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.