2014-11-29 3 views
0

Я использую googlemaps api, чтобы поместить некоторый маркер на карты. Однако по какой-то причине мой infoWindows для всех маркеров открывается по умолчанию Даже если нет клика. Я не знаю, почему это происходит, я пытался искать в других местах ниже код выглядит нормально (по крайней мере для меня)InfoWindows открывается без нажатия

function PoplatePoints(data) { 
var output = new google.maps.LatLng(25.4486, 78.5696); 
var mapOptions = { 
    center: output, 
    zoom: 7 
}; 
var map = new google.maps.Map(document.getElementById('map-canvas'), 
    mapOptions); 

//var contentString = []; 
// var infowindow = []; 
for (var i = data.length - 1; i >= 0; i--) { 

    var contentString = 'Hello This is me'; 

    var infowindow = new google.maps.InfoWindow(); 

    var icon_new = "/static/beyond/img/Green.png"; 

    var marker = new google.maps.Marker({ 
    position: new google.maps.LatLng(data[i].lat, data[i].long), 
    map: map, 
    icon: icon_new 
    }); 

    google.maps.event.addListener(marker, 'click', (function(mm,tt) { 
    infowindow.setContent(tt) 
    infowindow.open(map, mm) 
    })(marker, contentString)); 
} 

}

+0

потому что вы немедленно выполняете функцию обратного вызова, а не передаете ссылку на нее –

ответ

0

Проблема находится в вашем коде в самом конце, который устанавливает обработчик кликов. Он пытается создать закрытие в фантастическом ключе, но он непреднамеренно использует выражение с выведенной функцией (IIFE). Обратите внимание на часть «Сразу вызывается». Код не передает функцию ссылка на addEventListener как и должно быть, это фактически выполнение функция первая.

Вы действительно хотите закрыть здесь, но есть гораздо более простой способ настроить его. Я сделал бы это так:

function PopulatePoints(data) { 
    var output = new google.maps.LatLng(25.4486, 78.5696); 
    var mapOptions = { 
     center: output, 
     zoom: 7 
    }; 

    var map = new google.maps.Map(
     document.getElementById('map-canvas'), 
     mapOptions 
    ); 

    for(var i = 0; i < data.length; ++i) { 
     AddPoint(data[i]); 
    } 

    function addPoint(point) { 
     // TODO: This string will probably be passed in as a 
     // property of the point variable 
     var contentString = 'Hello This is me'; 

     var infowindow = new google.maps.InfoWindow(); 

     var icon_new = "/static/beyond/img/Green.png"; 

     var marker = new google.maps.Marker({ 
      position: new google.maps.LatLng(point.lat, point.long), 
      map: map, 
      icon: icon_new 
     }); 

     google.maps.event.addListener(marker, 'click', function() { 
      infowindow.setContent(marker); 
      infowindow.open(map, contentString); 
     }); 
    } 
} 
Смежные вопросы