Javascript 信息窗口正在打开,无需单击
我正在使用googlemaps api在地图上添加一些标记。但是,由于某些原因,即使没有单击,默认情况下也会打开所有标记的my infoWindows。我不知道为什么会发生这种情况,我尝试在其他地方搜索以下代码,至少对我来说是可以的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
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回调函数,而不是传递对它的引用