多标记奇怪点击问题:谷歌地图API

时间:2013-11-13 12:44:02

标签: javascript google-maps

我可以使用以下代码实现多个标记:

<?php foreach($dummy as $cid=>$data)
{   ?>
    var myLatlng = new google.maps.LatLng(<?php echo $data['lat']; ?>,<?php echo $data['lon']; ?>); 
    var marker = new google.maps.Marker({
          position: myLatlng,
          map: map,
          title: "<?php echo $data['name']; ?>"
    });
    icons[j] = marker;
    maps[0] = map;    
    j++;
<?php  
}   
?>  
for(var i = 0; i < icons.length; i++)
{       
   google.maps.event.addListener(icons[i], 'click', function(){
    markerClick(icons[i], maps[0]); // this is the problem area
    // markerClick(icons[0], maps[0]); // this works
    // markerClick(icons[1], maps[0]); // so does this
   });  
}   

function markerClick(marker_argument, map){     
    console.log(marker_argument);        
 }

问题在于google.maps.event.addListener功能。如果我使用变量i,则markerClick()&#39; s console.log()会返回 undefined 。但是,如果我使用硬编码值(1,2或3),console.log()将返回标记对象。

令我感到困惑的是,如果我使用循环变量i而没有传递参数,但是如果我对值进行硬编码则会起作用。我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

.addListener循环包装在JavaScript闭包中,它应该可以工作!