1

次のコードを使用して、複数のマーカーを実装できます。

<?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関数にあります。この変数を使用すると、iundefinedmarkerClick()返さconsole.log()れます。ただし、ハードコードされた値 (1、2、または 3) を使用すると、マーカー オブジェクトが返されます。console.log()

困惑するのは、ループ変数を使用すると引数が渡されないのにi、値をハードコーディングすると機能する理由です。ここで何が欠けていますか?

4

1 に答える 1

0

.addListenerループを JavaScript クロージャでラップすると、動作するはずです!

于 2013-11-13T15:34:31.157 に答える