Я помещаю маркеры карт Google в массив, и все работает нормально, когда я делаю это вручную:
var m =[];
m[0] = new google.maps.Marker(.....
google.maps.event.addListener(m[0], 'click', function()
{
alert('Markerklik');
$("#trasa").append(m[0].getPosition().toString()+"<br>");
});
m[1] = new google.maps.Marker( .....
google.maps.event.addListener(m[1], 'click', function()
{
alert('Markerklik');
$("#trasa").append(m[1].getPosition().toString()+"<br>");
});
Но если я захочу зацикливаться на:
for ( var i=0 ; i<2; i++ )
{
// do the same with m[i]
}
Я получаю m [i] не определено при нажатии на маркер (m [i] .getPosition ()).
Любые предложения, как сделать это автоматически с циклом?
Обратите внимание, что если я поместил маркер в переменную temp, добавлю слушателя в temp и сделаю m.push (temp); в цикле - нажатие на любой маркер дает мне позицию последнего добавленного маркера.
Это похоже на то, что добавление события в m [i] даже не проверяет значение i, оно не ищет, например, m [1], но что-то вроде переменной "named" m [i]
если я делаю весь код вручную с помощью m [0] и m [1] - все работает нормально, есть события, связанные с m [0] и m [1], но создаются маркеры с циклом for с m [i ] выглядит как событие привязки не к m [0], а после одного цикла m [1], но добавляет событие к «m [i]», когда i это просто буква i , а не значение i
Хорошо, похоже, этот код из ответа работает :
for (var i=0 ; i<2; i++ )
{
(function(x) {
m[x] = new google.maps.Marker( {
position: getRandomPoint(),
title: 'Mojmarkers'
});
google.maps.event.addListener(m[x], 'click', function() {
alert('Markerklik');
$("#trasa").append(m[x].getPosition().toString()+"<br>");
});
return m[x];
})(i);
}
Кто-нибудь может объяснить, почему это необычное решение работает так, как я хочу?