2011-10-26 58 views

回答

0

它看起來像你落入經典的循環加-closure誤差,以簡單的形式是這樣的:

while(i<=(a_l-1)) { 
    // snip 
    var marker = new google.maps.Marker({ 
     // snip 
    }); 
    google.maps.event.addListener(marker, 'click', function() { 
     infowindow.open(map,marker); 
    }); 
    // snip 
} 

的問題是,由於封閉在Javascript中的工作方式,處理函數將保持一個持久的參考變量,即使它是分配給一個新的對象。最終結果:您的所有處理程序都會引用分配給的最後一個對象。

有幾種方法可以解決這個問題;我通常使用一個單獨的功能來分配單擊處理程序,捕捉在處理範圍內正確對象:

function addClickHandler(marker) { 
    google.maps.event.addListener(marker, 'click', function() { 
     infowindow.open(map,marker); 
    }); 
} 

while(i<=(a_l-1)) { 
    var marker = new google.maps.Marker({ 
     // snip 
    }); 
    addClickHandler(marker); 
} 
+0

是的,如果你看,我做了什麼,把整個處理程序放在循環之外。儘管感謝您的幫助! :) – user981408

+0

如果這是正確的答案,您可以點擊旁邊的複選標記將其標記爲正確 - 謝謝! – nrabinowitz