Замыкание в цикле
Здравствуйте!
Скажите пожалуйста правильный ли такой код? Cломал уже голову c этим замыканием ) Код рабочий, но пока ничего лучшего не получилось. Мне нужно чтобы в function(){alert(i)} записывалось текущее значение "i" for(var i=0; i < 2; i++){ func(i); function func(i){ placemark[i].events.add('click', function(){alert(i)} ); } } Спасибо! |
HJ90,
:write: for (var i = 0; 2 > i; i++)(function (a) { placemark[a].events.add("click", function () { alert(a) }) })(i); |
рони, спасибо!
Но здесь тоже 2 раза создается анонимная функция. Это плохо если нужно перебирать большой цикл... Или я не прав? |
Цитата:
тогда создание отдельной функции для него - капля в море, нет смысла заморачиваться. |
Цитата:
Да, это метка на яндекс карте. Обычно будет создаваться 10-20 меток, Но возможна ситуация когда будет и 1000. |
попробуй такой вариант, вдруг прокатит:
function pmClick() { alert(this.value_i); } for(var i=0; i < 2; i++){ placemark[i].value_i = i; placemark[i].events.add('click', pmClick ); } т.е. к каждой метке прикрепить значение i, потом в хендлере получить его как-то через this |
Яростный Меч, не работает пример...
Я вот тоже так хотел. Но внутри function уже не видно локальную "i" Оно берет значение со scope, а там i = 1 |
На хабре есть такой пример.
Только у меня он почему-то не работает. http://habrahabr.ru/post/137318/ function addEvents2(divs) { var f=function f(){alert(this.$i)}; for(var i=0; i<divs.length; i++) { divs[i].innerHTML = i; divs[i].$i=i; divs[i].onclick = f; } } |
HJ90,
внутри обработчика должен быть способ достать тот элемент, на котором случился клик. вот, покури http://api.yandex.ru/maps/doc/jsapi/...pts/events.xml скорее всего, e.get('target') - оно самое e - объект, который передается первым параметром в хендлер. |
Яростный Меч
Да нет, это не то) e.get ('target') вернет ссылку на метку по которой кликнули а мне здесь нужно создать массив меток и присвоить им эвенты Но всеравно спасибо! :) |
Часовой пояс GMT +3, время: 18:18. |