2016-07-30 8 views
0

Я действительно не могу понять javascript, я знаю, что это должен быть очень простой вопрос, но я застрял. У меня есть карта google с несколькими маркерами, и я добавил каждый маркер и работал идеально, но я хотел дать их ссылки. Мой массив местоположений похож;Google Map Markers With Url

['http://website.com',36.598900,35.202094,'1'] 

Я использую [1] и [2] как lat long, но я хотел использовать [0] в качестве ссылки. Мой цикл работает отлично, но ссылка каждого маркера будет ссылка прошлого элемента

Вот моя петля

for (i = 0; i < locations.length; i++) { 
    marker = new google.maps.Marker({ 
    position: new google.maps.LatLng(locations[i][1], locations[i][2]), 
    map: map, 
    icon: image, 
    url: locations[i][0], 
    }); 

    google.maps.event.addListener(marker, 'click', function() { 
    window.location.href = marker.url; 
    }); 

} 

Где я сделал ошибку?

ответ

1

1/Вам нужно добавить var перед тем marker = new google.maps.Marker({,

Потому что, вы теперь использовать как глобальная переменная, которая переопределяется для каждой итерации.

2/В любом случае, лучшие практики - сохранить все маркеры в качестве атрибутов объекта. Назовем этот объект: mk, тогда ваши маркеры будут mk.marker0, mk.marker1, ... так далее.

var mk={}; // this is nameSpace to save all markers 
locations.map((loc,i)=>{ 
    mk['marker'+i] = new google.maps.Marker({ 
     position: new google.maps.LatLng(loc[1], loc[2]), 
     map: map, 
     icon: image, 
     url: loc[0], 
    }); 
    return mk['marker'+i]; 
}).forEach((marker)=>{ 
       google.maps.event.addListener(marker, 'click', function() { 
        window.location.href = marker.url; 
      });  

}) 
+0

Вы правы, я добавил var перед маркером, но ничего не изменилось. Тем не менее, все ссылки на последние позиции url value –

+0

@ ÇağdaşTakış: Я обновляю ответ, теперь он будет работать. Обязательно –

+1

Вы спасли мне время сна. Большое спасибо! –