2015-10-08 2 views
-1

Я посетил довольно много ответов на переполнение стека по этой теме, и ни один из ответов не работает для меня. Я добавляю слушателей к объектам в цикле for, но весь мой код прослушивателя применяется только к последнему циклу. Я дочитал о шкафах и это был подход, который я пытался, но я все еще возникают проблемы:Корпуса и петли в JavaScript

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)); 

} 
Смежные вопросы