2013-04-05 91 views
2

林循環,並把一些標記,但是當我點擊一個標記,它們都具有相同的價值谷歌地圖多個標記clickevent

這裏迴應是我的代碼

for(a=0; a < prod.length; a++){  
    // we add marker to map 
    var myLatlng = new google.maps.LatLng(prod[a]['lat'],prod[a]['lon']); 
    var marker = new google.maps.Marker({ 
    position: myLatlng, 
    map: map, 
    title: prod[a]['name']+" \n"+prod[a]['description'], 
    icon: image 
    });   
    google.maps.event.addListener(marker, "click", function() { 
    show_details(a); 
    });  
} 

功能show_details中,總是有相同的值

我已經看過其他答案,但沒有解決我的問題。

回答

10

異步編程/腳本編程中的問題。當點擊事件運行時,a變量傳遞,因此,該值是for循環完成後的值。 您應該創建一個內部函數作用域,並將a的值保存在一個變量中,該變量只存在於該範圍內。 解決辦法:

(function(z){ 
    google.maps.event.addListener(marker, "click", function() { 
     show_details(z); 
    });  
})(a); 

回調函數太外的a變量的生命。因此,如果修改a(或for循環修改該值)的值,並且在調用事件處理程序時,它會看到修改後的a

幫助鏈接:http://robertnyman.com/2008/10/09/explaining-javascript-scope-and-closures/

+0

謝謝,這麼合乎邏輯,但我完全忽略了它。 – Grumpy 2013-04-05 13:53:39