2015-01-08 55 views
-1

當我解釋什麼是「記憶」的意思時,和我一起裸聊。我有一個Google地圖。我爲地圖製作了一系列標記,併爲每個標記添加了聽衆。事件聽衆有趣的記憶問題

for(var venue in response.markers){ 
    var loc = new google.maps.LatLng(response.markers[venue].GPSX, response.markers[venue].GPSY); 
    var marker = new google.maps.Marker({ 
     position: loc, 
     title: response.markers[venue].VenueName, 
     map: map 
    }); 

    google.maps.event.addListener(marker, 'click', function() { 
     alert(venue); 
    }); 
    markers.push(marker); 
} 

通過單擊該標記時,場地有但是很多事情有在response.markers值。我如何讓聽衆提醒或使用創建時的原始價值地點?例如,第一個標記應該提醒0,第二個提示1,依此類推。謝謝!

回答

2

在for循環在JavaScript中完成後,變量仍然保留。但是,它們被設定爲最終的價值。所以當點擊功能最終被調用時,場地是response.markers中的最後一項。

我會使用函數上的綁定方法來創建一個新的函數,並在正確的時間綁定適當的參數。像這樣:

function alertVenue(venue) { 
    alert(venue); 
} 

for(var venue in response.markers){ 

    // other stuff goes here 

    google.maps.event.addListener(marker, 'click', alertVenue.bind(this, venue)); 
    markers.push(marker); 
} 

使用bind的好處是,你的堆棧跟蹤會看起來更好(因爲alertVenue是一個名叫功能),它很清楚,當你讀它,以及發生了什麼。

+0

肯定的工作,謝謝! – Galway

+0

沒問題,如果它適合你,那麼請隨時接受答案。 – aychedee

1

你可以這樣做:

google.maps.event.addListener(marker, 'click', (function(venue) { 
     return function(){alert(venue)}; 
    }(venue))); 

,以避免關閉與外場地

+0

工作就像一個魅力! – Galway