我正在尝试制作一系列标记,并让每个标记打开一个信息窗口,其中包含相关信息,但我要么无法阅读'应用'未定义的属性或在错误的标记上打开;我的两次尝试是:
无法阅读申请:
var infowindow = new google.maps.Infowindow();
for (var i=0;i<popular.length;i++){
var mkrLatLng = new google.maps.LatLng(popular[i][1], popular[i][2]);
var marker = new google.maps.Marker({
map: map,
title: popular[i][0],
position: mkrLatLng
});
markers.push(marker);
}
for (var i=0;i<markers.length;i++){
markers[i].addListener('click', (function(){
console.log('click');
cont = "<div> " + markers[i].title + " </div>";
infowindow.setContent(cont);
infowindow.open(map, marker);
})(markers));
}
打开错误的标记(匿名函数包含在另一个函数中,因为它摆脱了未定义的错误,我不明白为什么):
var infowindow = new google.maps.Infowindow();
for (var i=0;i<popular.length;i++){
var mkrLatLng = new google.maps.LatLng(popular[i][1], popular[i][2]);
var marker = new google.maps.Marker({
map: map,
title: popular[i][0],
position: mkrLatLng
});
marker.addListener('click', function(){(function(){
console.log('click');
cont = "<div> " + marker.title + " </div>";
infowindow.setContent(cont);
infowindow.open(map, marker);
})(marker)});
markers.push(marker);
}
答案 0 :(得分:1)
你的结构错了
这是示例enter link description here
//wrong
for(var i=0;i<3;i++){
var count=i
$('<p>wrong</p>').on('click',function(){
alert(count)
}).appendTo('body')
}
//what you want
for(var i=0;i<3;i++){
createEl(i)
}
function createEl(i){
$('<p>correct</p>').on('click',function(){
alert(i)
}).appendTo('body')
}
希望这能帮助您理解为什么会出错
因此您需要将代码更改为
for(){
createMarker(parameter)
}
function createMarker(parameter){
var marker=...,
infowindow=....
marker.addlistener(...)
.......
}
答案 1 :(得分:0)
尝试使用您的第二个代码,将 var infowindow 设为全局,也许它会起作用,我不确定。
否则你可以在forloop中新建每个infowindow,然后推入数组,就像你处理标记一样。
var mark = new google.maps.Marker({
map: map,
position: place.geometry.location,
optimized: false,
icon: 'red-dot.png'
}),
infowindow = new google.maps.InfoWindow()
infowindow.setContent(place.name)
infowindows.push(infowindow)
//then addlistener to marker
//markers.push(marker)
要打开一个infowindow,请使用 infowindow.close()关闭所有信息窗口,
然后调用 infowindow.open(地图,标记)