Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在循环中声明google地图标记_Javascript_Google Maps_Google Maps Api 3_Google Maps Markers - Fatal编程技术网

Javascript 在循环中声明google地图标记

Javascript 在循环中声明google地图标记,javascript,google-maps,google-maps-api-3,google-maps-markers,Javascript,Google Maps,Google Maps Api 3,Google Maps Markers,我对谷歌地图标记上的事件侦听器有一个奇怪的问题。基本上,我想在一个循环中声明一组标记,并让每个标记都有一个关联的信息窗口。有关守则如下: var markers=[]; var contents = []; var infowindows = []; for (i = 0; i < 10; i++) { markers[i] = new google.maps.Marker({ position: new google.maps.LatLng(40+Math.r

我对谷歌地图标记上的事件侦听器有一个奇怪的问题。基本上,我想在一个循环中声明一组标记,并让每个标记都有一个关联的信息窗口。有关守则如下:

var markers=[];
var contents = [];
var infowindows = [];


for (i = 0; i < 10; i++) { 

    markers[i] = new google.maps.Marker({
      position: new google.maps.LatLng(40+Math.random()*5, 4+Math.random()*5),
      map: map,
      title: 'samplemarker'
    });

    contents[i] = '<div class="popup_container">' +
    '</div>';


    infowindows[i] = new google.maps.InfoWindow({
    content: contents[i],
    maxWidth: 300
    });

    google.maps.event.addListener(markers[i], 'click', function() {
            infowindows[i].open(map,markers[i]);
            map.panTo(markers[i].getPosition());
    });  
}
单击标记_1时,将打开信息窗口0,并将地图平移到标记0。但是,当在完全相同的位置写入相同的行时,除了标记_1被标记[0]替换外,单击标记0根本没有任何效果


谢谢你的帮助,如果这是愚蠢的事情,我很抱歉

在onclick处理程序中,您还没有该
i
值,在您的情况下,它总是在循环结束后取
i
的最后一个值,即10,并且标记[10]不存在,因为您只有10个标记

要使其正常工作,您可以向数组中的标记添加其他属性,该属性将存储标记索引并在onlick处理程序中使用

var markers=[];
var contents = [];
var infowindows = [];


for (i = 0; i < 10; i++) { 

    markers[i] = new google.maps.Marker({
        position: new google.maps.LatLng(40+Math.random()*5, 4+Math.random()*5),
        map: map,
        title: 'samplemarker'
    });

    markers[i].index = i; //add index property
    contents[i] = '<div class="popup_container"></div>';


    infowindows[i] = new google.maps.InfoWindow({
        content: contents[i],
        maxWidth: 300
    });

    google.maps.event.addListener(markers[i], 'click', function() {
        console.log(this.index); // this will give correct index
        console.log(i); //this will always give 10 for you
        infowindows[this.index].open(map,markers[this.index]);
        map.panTo(markers[this.index].getPosition());
    });  
}
var标记=[];
var内容=[];
var infowindows=[];
对于(i=0;i<10;i++){
markers[i]=新的google.maps.Marker({
位置:新的google.maps.LatLng(40+Math.random()*5,4+Math.random()*5),
地图:地图,
标题:“样本标记”
});
标记[i].index=i;//添加索引属性
内容[i]='';
infowindows[i]=新的google.maps.InfoWindow({
内容:内容[i],
最大宽度:300
});
google.maps.event.addListener(标记[i],'click',函数(){
console.log(this.index);//这将给出正确的索引
console.log(i);//这将始终为您提供10
infowindows[this.index].open(映射,标记[this.index]);
map.panTo(标记[this.index].getPosition());
});  
}

i
在侦听器函数中没有您认为的值。看看这篇文章,我试着把它改成另一个变量名,但没有用。此外,即使这是问题所在,它也无法解释代码段google.maps.event.addListener(标记[0],'click',function(){infowindows[0].open(映射,标记[0]);map.panTo(标记[0].getPosition();});如果在for循环之外调用,将无法工作。哦,我现在明白了slash197的含义。。。非常感谢,这帮了大忙!今天我学到了一些东西:-)
var markers=[];
var contents = [];
var infowindows = [];


for (i = 0; i < 10; i++) { 

    markers[i] = new google.maps.Marker({
        position: new google.maps.LatLng(40+Math.random()*5, 4+Math.random()*5),
        map: map,
        title: 'samplemarker'
    });

    markers[i].index = i; //add index property
    contents[i] = '<div class="popup_container"></div>';


    infowindows[i] = new google.maps.InfoWindow({
        content: contents[i],
        maxWidth: 300
    });

    google.maps.event.addListener(markers[i], 'click', function() {
        console.log(this.index); // this will give correct index
        console.log(i); //this will always give 10 for you
        infowindows[this.index].open(map,markers[this.index]);
        map.panTo(markers[this.index].getPosition());
    });  
}