Google maps API将clickowindow添加到click事件的标记数组中

时间:2017-06-21 03:04:42

标签: javascript google-maps-api-3

我正在尝试制作一系列标记,并让每个标记打开一个信息窗口,其中包含相关信息,但我要么无法阅读'应用'未定义的属性或在错误的标记上打开;我的两次尝试是:

无法阅读申请:

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

2 个答案:

答案 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(地图,标记)