Javascript 信息窗口正在打开,无需单击

Javascript 信息窗口正在打开,无需单击,javascript,google-maps,google-maps-api-3,infowindow,Javascript,Google Maps,Google Maps Api 3,Infowindow,我正在使用googlemaps api在地图上添加一些标记。但是,由于某些原因,即使没有单击,默认情况下也会打开所有标记的my infoWindows。我不知道为什么会发生这种情况,我尝试在其他地方搜索以下代码,至少对我来说是可以的 function PoplatePoints(data) { var output = new google.maps.LatLng(25.4486, 78.5696); var mapOptions = { center: output, zoom: 7

我正在使用googlemaps api在地图上添加一些标记。但是,由于某些原因,即使没有单击,默认情况下也会打开所有标记的my 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));
}

}

问题在于设置单击处理程序的最末端的代码。它试图以一种奇特的方式设置一个闭包,但无意中使用了一个立即调用的函数表达式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 );
        });
    }
}

因为您正在立即执行click回调函数,而不是传递对它的引用