2015-10-08 28 views
-1

我已經訪問了很多關於此主題的Stack Overflow答案,但沒有一個答案似乎適用於我。我將偵聽器添加到for循環中的對象,但我所有的偵聽器代碼都只應用於最後一個循環。我讀了關於機箱,這是我想盡了辦法,但我仍然有問題:JavaScript中的外殼和for循環

for (var i = 0; i < beaches.length; i++) { 
    var beach = beaches[i]; 
    var marker = new google.maps.Marker({ 
     position: {lat: beach[1], lng: beach[2]}, 
     map: map, 
     icon: image, 
     shape: shape, 
     title: beach[0], 
     zIndex: beach[3] 
    }); 
    var contentString = contentstrings[i]; 
    function makeItHappenDelegate() { 
     return function(){ 
     var infowindow = new google.maps.InfoWindow({ 
       content: contentString 
        }); 
     infowindow.open(map, marker); 
    } 
    }; 
marker.addListener('click',makeItHappenDelegate()); 


    } 

這意味着該功能makeItHappenDelegate()被作爲對我的所有標記執行的功能應用。

任何幫助將不勝感激。

+0

我不認爲你正確地複製的解決方案。 – Mathletics

回答

1

你必須捕捉contentString和值,你可以做這樣的:

for (var i = 0; i < beaches.length; i++) { 
    var beach = beaches[i]; 
    var marker = new google.maps.Marker({ 
     position: { 
      lat: beach[1], 
      lng: beach[2] 
     }, 
     map: map, 
     icon: image, 
     shape: shape, 
     title: beach[0], 
     zIndex: beach[3] 
    }); 

    var contentString = contentstrings[i]; 

    function makeItHappenDelegate(contentString, marker) { 
     return function() { 
      var infowindow = new google.maps.InfoWindow({ 
       content: contentString 
      }); 
      infowindow.open(map, marker); 
     } 
    }; 
    marker.addListener('click', makeItHappenDelegate(contentString, marker)); 

}