2012-05-04 11 views
1

私は下のマップapiを作成し、データベースからのアドレスの配列を持っています。 地図が正しく読み込まれますが、次の問題があります。マップは、「1,2,3,4,5」ダイナミックマーカー - Google Maps API - ループ内のi値で増分しないマーカー

// Define Vars 
var pinColor = "FE7569"; 
var marker, i; 

// Set default map center location 
var latlng = new google.maps.LatLng(-27.79014,153.18049); 

// Create pinShadow for each marker 
var pinShadow = new google.maps.MarkerImage("http://chart.apis.google.com  /chart?chst=d_map_pin_shadow", 
    new google.maps.Size(40, 37), 
    new google.maps.Point(0, 0), 
    new google.maps.Point(12, 35)); 

// Function to create the dynamic marker 
function pinImage(i){ 
    return image = new google.maps.MarkerImage("http://www.googlemapsmarkers.com/v1/"+i+"/"+pinColor+"/", new google.maps.Size(21, 34), new google.maps.Point(0,0), new google.maps.Point(10, 34)); 
} 

// Function to run once page has loaded 
    function initialize(){  
// Set Default settigns for google map 
var settings = { 
    zoom: 10, 
    center: latlng, 
    mapTypeControl: true, 
    mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU}, 
    navigationControl: true, 
    navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL}, 
    mapTypeId: google.maps.MapTypeId.ROADMAP}; 

// Start Google Maps and assign it to div on site 
var map = new google.maps.Map(document.getElementById("map_canvas"), settings);  

// loop though total numner of address in array 
for (i = 1; i < total; i++) { 
    // Use geocoder to grab latlong for user inputed address 
    geocoder.geocode({ 'address': address[i]}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      // Redefine map center location 
      if (i = 1){ map.setCenter(results[0].geometry.location); } 

      // Create dynamic markers on map as per the address array 
      var marker = new google.maps.Marker({ 
       map: map, 
       position: results[0].geometry.location, 
       title:address[i], 
       zIndex: i, 
       // PROBLEM CODE --- Using the function below it creates all Markers with a "1" instead of the "i" value..?? 
       icon: pinImage(i), 
       shadow: pinShadow 
      });   
     } 
    }); 
    } 
} 
「1」ですべてのマーカーを表示しないように、ダイナミックマーカーは「I」..の値がインクリメントされていない

答えて

0

古い「機能スコープラッパー」トリック(function(i) {...})(i)はここで機能します。それがなければ、実行はiの最終値をとる。また、if(i = 1)は遊ぶためにif(i == 1)

次のようになります。http://jsfiddle.net/BK8vv/

for (var i = 1; i < total; i++) { 
    (function(i) { 

    // Use geocoder to grab latlong for user inputed address 
    geocoder.geocode({ 'address': address[i]}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      // Redefine map center location 
      if (i == 1){ map.setCenter(results[0].geometry.location); } 

      // Create dynamic markers on map as per the address array 
        alert(i); 
      var marker = new google.maps.Marker({ 
       map: map, 
       position: results[0].geometry.location, 
       title:address[i], 
       zIndex: i, 
       // PROBLEM CODE --- Using the function below it creates all Markers with a "1" instead of the "i" value..?? 
       icon: pinImage(i), 
       shadow: pinShadow 
      });   
     } 
     }); 
    })(i); 
    } 
} 
+0

おかげで御馳走に動作します! ---良い($ i ==)! –

+0

喜んで、いつでも戻ってくる! –

+0

別の機能に分割することをお勧めします。 –

関連する問題